mogoose小记

mogoose

schema---模式定义,堆数据库字段的类型进行定义【string,int,float】

var mongoose = require('mongoose'); // 顶会议用户组件
// 创建模型
var Schema = mongoose.Schema;
var userScheMa = new Schema({
   userid: String,
   password: String
});

Model---编译模型

通过模式构造而来

Document---文档实例化

Mongoose中的操作流程

1. 连接数据库

var mongoose = require("mongoose");

// 连接字符串格式为mongodb://主机/数据库名
mongoose.connect('mongodb://localhost/test');

 

2. 存储数据

var Schema = mongoose.Schema;
//骨架模版
var movieSchema = new Schema({
    doctor   : String,
    title    : String,
    language : String,
    country  : String,
    year     : Number,
    summary  : String,
    poster   : String,
    flash    : String
})
//模型
var Movie = mongoose.model('Movie', movieSchema);
//存储数据
var moive = new Movie({
    title: '黑衣人三',
    doctor: '史密斯',
    year: 2018,
    flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
    country: '美国',
    language: '英语',
    summary: '好片'
})
//保存数据库
moive.save(function(err) {
    if (err) {
        console.log('保存失败')
        return;
    }
    console.log('meow');
});

以上是最简单的数据操作了

流程就是:通过Schema创建一个模式movieSchema ,通过模式movieSchema创建一个模型Movie,通过模型Movie写入数据,通过save方法保存

定义schema->创建model->实例化方法

表 –》 合集 –》 文档

这里涉及几个名词概念Schema与Model

3.Schema与Model

  • Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
  • Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

虽然模式(Schema)在MongoDB的存储中并不是必须的,但是一般来说为了文档的整齐一致我们在Mongoose中还是会用到模式。可以说,Mongoose中的一切都从定义模式开

不像传统的关系型数据库一样,比如mysql,连接好数据后直接有把sql语句丢到一个指定的方法中就执行了,这里会有Schema的抽象概念

Schema它类似于关系数据库的表结构,可以理解为数据库模型骨架

Schema可以看作工厂中模具一样,好比一个茶杯,喝水是茶杯最终的功能,茶杯本身就像是Model,那么茶杯的批量生产是需要靠工厂的模具成型的,这就像是Schema了

Schema不仅定义了文档结构和使用性能,还可以有扩展插件、实例方法、静态方法、复合索引、文档生命周期钩子

Schema生成Model

4. CURD操作

Model可以看到关系型数据库中的表,那么通过new Model出来的实例document文档对应的则是关系数据库中表的一行记录

document有许多内置的实例方法. 可以直接执行增删改查操作

增加数据

//模型var Movie = mongoose.model('Movie', movieSchema);
var moive = new Movie({
    title: '黑衣人三',
    doctor: '史密斯',
    year: 2018,
    flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
    country: '美国',
    language: '英语',
    summary: '好片'
})
//保存数据库
moive.save(function(err) {
    if (err) {
        console.log('保存失败')
        return;
    }
    console.log('meow');
});

在这里我们通过对模型Movie实例化生成了一个叫moive的文档,并使用save方法将它存储到了集合

修改数据

User.update({_id: oneUser._id}, {
    $set: {name: oneUser.name,password:oneUser.password}
}, function(err) {
    if(err){
        console.log(err)
        return
    }
    console.log('更新成功')
});

更新的数据比较少用$set,可用性还是很好

删除数据

User.remove({
    _id: id
}, function(err) {
    if (err) {
        console.log(err)
        return
    }
    console.log('删除成功')
});

3. Documents

  Document是与MongoDB文档一一对应的模型,Document可等同于Entity,具有属性和操作性

注意:

  Document的`CRUD都必须经过严格验证的,参看2.5.2 Schema的strict严格配置

3.1 查询

  查询内容过多,专题讲解

3.2 更新

  有许多方式来更新文件,以下是常用的传统方式:

    PersonModel.findById(id,function(err,person){
      person.name = 'MDragon';
      person.save(function(err){});
    });

  这里,利用Model模型查询到了person对象,该对象属于Entity,可以有save操作,如果使用Model`操作,需注意:

    PersonModel.findById(id,function(err,person){
      person.name = 'MDragon';
      var _id = person._id; //需要取出主键_id
      delete person._id;    //再将其删除
      PersonModel.update({_id:_id},person,function(err){});
      //此时才能用Model操作,否则报错
    });

  update第一个参数是查询条件,第二个参数是更新的对象,但不能更新主键,这就是为什么要删除主键的原因。

  当然这样的更新很麻烦,可以使用$set属性来配置,这样也不用先查询,如果更新的数据比较少,可用性还是很好的:

    PersonModel.update({_id:_id},{$set:{name:'MDragon'}},function(err){});

  需要注意,DocumentCRUD操作都是异步执行,callback第一个参数必须是err,而第二个参数各个方法不一样,updatecallback第二个参数是更新的数量,如果要返回更新后的对象,则要使用如下方法

    Person.findByIdAndUpdate(_id,{$set:{name:'MDragon'}},function(err,person){
      console.log(person.name); //MDragon
    });

  类似的方法还有findByIdAndRemove,如同名字,只能根据id查询并作update/remove操作,操作的数据仅一条

3.3 新增

  如果是Entity,使用save方法,如果是Model,使用create方法

    //使用Entity来增加一条数据
    var krouky = new PersonModel({name:'krouky'});
    krouky.save(callback);
    //使用Model来增加一条数据
    var MDragon = {name:'MDragon'};
    PersonModel.create(MDragon,callback);

  两种新增方法区别在于,如果使用Model新增时,传入的对象只能是纯净的JSON对象,不能是由Model创建的实体,原因是:由Model创建的实体krouky虽然打印是只有{name:'krouky'},但是krouky属于Entity,包含有Schema属性和Model数据库行为模型。如果是使用Model创建的对象,传入时一定会将隐藏属性也存入数据库,虽然3.x追加了默认严格属性,但也不必要增加操作的报错

3.4 删除

  和新增一样,删除也有2种方式,但EntityModel都使用remove方法

转载于:https://my.oschina.net/u/3522874/blog/916523

### 使用 UniApp 开发小记账本应用程序 #### 项目概述 生活记账小程序通过前端 Vue 和 UniApp 设计开发,后端采用 SpringBoot 提供数据接口支持。主要功能模块包括首页展示、分类记账以及微信登录状态管理[^1]。 #### 创建新项目 首先安装 HBuilderX 或者其他 IDE 工具来创建一个新的 UniApp 项目: ```bash npm install -g @dcloudio/uni-cli uni create myAccountBookProject ``` 进入项目目录并初始化必要的配置文件。 #### 配置 App.vue 生命周期函数 为了更好地控制应用生命周期,在 `App.vue` 中定义如下几个重要钩子函数用于处理不同场景下的逻辑操作: - **onLaunch**: 当整个程序启动时调用此方法, 可以在这里做一些全局性的初始化工作. - **onShow**: 页面每次从前台切到后台再返回前台都会触发这个事件, 合适用来刷新某些实时变化的内容. - **onHide**: 对应于当用户点击 Home 键使 APP 进入后台运行模式时执行的动作. 这些设置有助于提升用户体验流畅度和响应速度[^2]. #### 数据绑定与交互实现 确保所有的业务逻辑都放置在 methods 下面,并且避免 data 属性名称同 method 名冲突以免造成不必要的错误;另外注意检查 HTML 标签内部是否存在重复属性声明尤其是集成第三方 UI 组件库 uView-ui 的时候要格外小心[^3]: ```html <template> <!-- 记录条目输入框 --> </template> <script> export default { name: 'RecordEntry', data() { return { recordType: '', amount: null, date: '' } }, methods:{ addNewRecord(){ // 添加新的财务记录... } } } </script> ``` #### 接口对接与缓存机制 对于前后端分离架构的应用来说,合理的 API 路由规划至关重要。这里推荐使用 RESTful 风格的服务端点配合 axios 发起 HTTP 请求完成增删改查等基本 CRUD 功能。与此同时引入 Redis 做为临时存储介质加速频繁访问的数据读取效率降低 MySQL 查询压力。 #### 微信开放能力接入 如果计划让这款理财工具具备社交分享特性,则需按照官方文档指引注册成为微信公众平台开发者账号获得 appid 权限认证之后才能正常使用诸如支付等功能服务。此外还可以考虑加入直播营销插件吸引更多潜在客户群体关注产品动态[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值