第7章-使用ORM类库Mongoose提升你的Node.js数据-7.5.Mongoose模型

就像在很多其他ORM中一样,在Mongoose中,模型都是最基础的对象。
将原型编译为一个模型,使用mongoose.model(name, schema)即可
如:

var Book = mongoose.model('Book', bookSchema);

第一个参数是一个字符串,我们可以使用它来调用这个实例。
通常,这个字符串和模型的变量名一致(例如:Book)

我们可以使用new ModeName(data)这样的代码来创建文档,例如:

var practicalNodeBook = new Book({name: 'Practical Node.js'});
var javascriptTheGoodPartsBook = new Book({name: 'JavaScript The Good Parts'});

一、通过构造函数赋初值,少使用set方法,减少函数调用

相比使用document.set()方法来说,最好通过构造器来指定初始值,因为这样Mongoose可以少处理一些函数调用,同时我们的代码也会更紧凑、更有层次。
当然,前提是当我们创建实例时知道这些属性的值。

不要混淆静态方法和实例方法。
当我们调用practicalNodeBook的一个方法,这是实例方法;当我们调用Book对象的方法,则是静态类方法。

模型有一些内建的静态方法同Mongoskin以及原生MongoDB方法类似,例如:find()、create()和update()。

二、Mongoose内置静态方法

1.Model.create(data, [callback(error, doc)]):创建一个新的Mongoose文档并保存到数据库
2.Model.remove(query, [callback(error)]):删除集合中与查询条件匹配的文档。当完成时,调用带error参数的回调函数。
3.Model.find(query, [fields], [options], [callback(error, docs)]):查找与查询条件(JSON对象)匹配的文档
4.Model.update(query, update, [options], [callback(error, affectedCount, raw)]):更新文档,与本地更新类似
5.Model.populate(docs, options, [callback(error, doc)]):使用其他集合的引用来填充文档;这是替换的另一种说法
6.Model.findOne(query, [fields], [options], [callback(error, doc)]):查找第一个与查询条件匹配的文档
7.Model.findById(id, [fields], [options], [callback(error, doc)]):查找第一个_id值与id参数相同的元素(id根据原型进行类型转换)
8.Model.findOneAndUpdate([query], [update], [options], [callback(error, doc)]):查找第一个和查询条件匹配的文档然后更新他,并且返回这个文档对象;同类型的方法是findAndModify
9.Model.findOneAndRemove(query, [options], [callback(error, doc)]):查找第一个和查询条件匹配的文档然后删除他,并且返回这个文档对象
10.Model.findByIdAndUpdate(id, [update], [options], [callback(error, doc)]):和findOneAndUpdate类似,但是只用ID来匹配

注:并不是所有的Mongoose模型方法都会触发钩子。
其中一些方法是直接执行。例如,调用Model.remove()方法并不会触发remove这个钩子,因为没有Mongoose文档被涉及。
Model的实例名一般用首字母小写的字符串表示。

三、常用方法列举

1.doc.model(name):返回另一个Mongoose模型
2.doc.remove([callback(error, doc)]):删除这个文档
3.doc.save([callback(error, doc, affectedCount)]):保存这个文档
4.doc.update(doc, [options], [callback(error, affectedCount, raw)]):使用doc属性以及options参数更新文档,直到完成更新时触发一个带有error、affectedCount的数量以及输出的数据库参数的回调函数
5.doc.toJSON([option]):将一个Mongoose文档转为JSON对象
6.doc.toObject([option]):将一个Mongoose文档转为纯的JavaScript对象
7.isModified([path]):用来判断文档的某些部分(或者具体的字段)是否修改过,分别返回true或false
8.markModified(path):手动标记一个字段为修改过,这对于混合数据类型(Schema.Types.Mixed)很有用,因为混合类型不会自动触发标记修改
9.doc.isNew:判断一个文档是否为新建的,分别返回true或false
10.doc.id:返回文档的ID
11.doc.set(path, value, [type], [options]):设置一个path的value
12.doc.validate(callback(error)):手动进行验证(在save()之前自动触发)

toObject()和toJSON()的可配置的参数清单如下:
1.getters:是否对所有字段进行转换(包括虚拟字段),分别返回true或false
2.virtuals:是否对虚拟字段进行转换,重写该字段的配置选项
3.minimize:删除空属性和空对象(默认值是true),分别返回true或false
4.transform:在返回对象之前执行这个转换函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值