Model.create(doc(s), [fn])

Mongoose之01基础知识.md 一文中,我们知道实例化的模型也就是创建了一个文档;

Model.create(doc(s), [fn]) 是创建文档的一个快捷方式,如果文档是有效的,则自动保存到数据库中;

参数(Parameters)

  • doc(s) < Array, Object… >

  • [fn] < Function > callback

    callback 的第一个参数是错误信息,后面的参数是对应的创建的文档信息;

返回值(Returns)

  • < Promise >

例子(Example)

//- 创建单条文档,这里的单条不是指一条,而是多个一条一条的用逗号隔;
Blog.create({ title: 'css', author: 'jay' }, { title: 'html', author: 'reg' }, function(err, docInfo, docInfo2) {
  if (err) //- ...
});

//- 使用数组批量创建文档
var array = [{ title: 'css3', author: 'jay' }, { title: 'html5', author: 'reg' }];
Blog.create(array, function(err, docInfo, docInfo2) {
  if (err) //- ...
});

//- 回调函数是可选的,如果想以后对回调进行操作可以这样
var promise = Blog.create({ title: 'css2.1' });
promise.then(function(docInfo) {
  //- ...
});

  • 循环插入单条记录与批量插入相比,消耗时间差别还是很大的,因为单条插入每次需要发送请求头给 MongoDB 数据库服务器,这与前端减少请求数提升性能的原理是一样的;

  • 使用 create() 创建文档,不用再单独调用 save() 方法;

  • 要想把 save()create() 的集合写入到数据库中,记得要先启动连接 MongoDB

      var mongoose = require('mongoose');
      mongoose.connect('mongod://localhost/blog');
    

Model.find(conditions, [fields], [options], [callback])

参数(Parameters)

  • conditions < Object >

    查询条件,通常是文档,空对象表示查询所有的文档;

  • [fields] < Object, String > optional fields to select

    限定查询结果中显示的字段,默认显示所有字段,除非主动限定不显示 _id 字段否则默认会显示的;

    String,表示时,多个字段用空格分隔;如(‘name age -phone’)

    Object,表示时,1/!false 表示显示的字段,0/false 表示不显示的字段;如({ name: 1, age: 1, phone: 0 })

  • [options] < Object > optional

    设置查询选项

  • [callback] < Function >

    create() 不一样,这里的 callback 第二个参数是所有的文档的一个对象;

返回值(Returns)

  • < Query >

参考(see)

  • field selection

  • promise

  • setOptions

conditions 是在计算他们各自的 SchemaTypes 之前被发送;

例子(Examples)

//- 查询 name 为 jay 并且 age 至少 25 的文档
contactbook.find({ name: 'Jay', age: { $gte: 25 }});

//- 在回调函数中立即执行查询的结果
contactbook.find({ age: { $gte: 25 }}, function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 也可以使用正则来匹配哟,牛逼吧
//- 查询 name 是 两个字母 的文档,限定查询结果显示的字段为 name 和 age 两个字段,当然 _id 字段是肯定会显示的,所以最终显示 3 个字段
contactbook.find({ name: /^[a-zA-Z]{2}$/i }, 'name age', function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 等价于:

contactbook.find({ name: /^[a-zA-Z]{2}$/i }, {name: 1, age: 1}, function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 查询所有文档,限定查询结果不显示 name 字段
contactbook.find({}, '-name', function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 等价于

contactbook.find({}, { name: 0 }, function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 设置查询选项: skip = 3 (跳过前 3 项),输出剩下的项;
contactbook.find({}, null, { skip: 3 }, function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//- 明确的执行查询结果;(executing a query explicitly)
var query = contactbook.find({ name: /^[a-zA-Z]{2}$/i }, null, { skip: 1 });
query.exec(function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

//-使用返回的 `promise` 执行一个查询;(using the promise returned from executing a query)
var query = contactbook.find({ name: /^[a-zA-Z]{2}$/i }, null, { skip: 1 });
var promise = query.exec();
promise.addBack(function(err, docs) {
  if (err) console.error(err);
  console.log(docs);
});

调用 `find()` 的模型名要跟 `model` 里面定义的名一样,因为这是集合的名字,如果不一样,是查询不到结果的;

Model.findById(id, [fields], [options], [callback])

通过 id 查询一个单一的文档,其实现内部就是调用的 findOne() 方法

Model.findById = function findById (id, fields, options, callback) {
  return this.findOne({ _id: id }, fields, options, callback);
};

参数(Parameters)

  • id < ObjectId, HexId > objectid, or value that can be casted to one

  • [fields] < Object, String > optional fields to select

    限定查询结果中显示的字段,默认显示所有字段,除非主动限定不显示 _id 字段否则默认会显示的;

    String,表示时,多个字段用空格分隔;如(‘name age -phone’)

    Object,表示时,1/!false 表示显示的字段,0/false 表示不显示的字段;如({ name: 1, age: 1, phone: 0 })

  • [options] < Object > optional

    设置查询选项

  • [callback] < Function >

    create() ,这里的 callback 第二个参数是匹配的文档对象;

返回值(Returns)

  • < Query >

参考

  • field selection

  • lean queries

例子(Example)

//- 在 `contactbook` 集合中查找 id='53ccc294440ae3e11d3713d2' 的文档
contactbook.findById('53ccc294440ae3e11d3713d2', function(err, doc) {
  if (err) console.error(err);
  console.log(doc);
});

//- 在 `contactbook` 集合中查找 id='53ccc294440ae3e11d3713d2' 的文档,只显示 name 和 id 字段
contactbook.findById('53ccc294440ae3e11d3713d2', 'name', function(err, doc) {
  if (err) console.error(err);
  console.log(doc);
});

Model.findByIdAndRemove(id, [options], [callback])

通过 id 删除数据库中的一个文档

参数(Parameters)

  • id < ObjectId, HexString > ObjectId or string that can be cast to one

  • [options] < Object >

  • [callback] < Function >

    第二个参数是删除那个文档

返回值(Returns)

  • < Query >

参考(see)

  • Model.findOneAndRemove

  • mongodb

选项(options)

  • sort

  • select

例子(Examples)

//- 删除 id = 53ccc294440ae3e11d3713d5 这个的文档
contactbook.findByIdAndRemove('53ccc294440ae3e11d3713d5', function(err, doc) {
  if (err) console.error(err);
  console.log(doc);
});

Model.findByIdAndUpdate(id, [update], [options], [callback])

参数(Parameters)

返回值(Returns)

参考(See)

选项(options)

例子(Examples)

field selection

指定文档包含或排除的字段

参数(Parameters)

arg < Object, String >

返回值(Returns)

< Query > this

参数(see)

SchemaType

例子(Example)

//- 包含 a 和 b, 排除 c
query.select('a b -c');

//- 也可以使用对象表示法,尤其是当字段前面有 '-' 前缀时,1表示包含,0表示排除
query.select({ a: 1, b: 1, c: 0 });

//- force inclusion of field excluded at schema level
query.select('+path');

:不能用于 distinct().

promise

Promise 构造函数

参数(Parameters)

fn < Function >

继承(Inherits)

mpromise

事件(Events)

`err`:当发出 `promise` 被拒绝的时候;

`complete`:当发出 `promise` 被实现的时候;

例子(Example)

从查询结果中返回 promises:

var query = Blog.find({ title: 'css' });
var promise = query.exec();

Query#setOptions(options)

设置查询选项(Sets query options.)

参数(Parameters)

  • options < Object >

Options

这些选项都是 MongoDB

  • tailable *

  • sort *

  • limit *

  • skip *

    跳过

  • maxscan *

  • batchSize *

  • comment *

  • snapshot *

  • hint *

  • slaveOk *

  • lean *

  • safe

星号 (*) 代表一个查询辅助方法是可用的;

Query#exec([operation], [callback])

执行查询

参数(Parameters)

  • [operation] < String, Function >

  • [callback] < Function >

返回值(Returns)

  • < Promise >

例子(Examples)