mongoose学习笔记5之Queries

假设以下代码都运行在

let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
let db = mongoose.connection;
db.on('error', () => {
  console.error('链接失败');
});
db.once('open', function () {
  //下面讲到的所有代码都在这里运行
});

Queries

文档可以通过模型的几个静态辅助方法检索。
涉及指定查询条件的任何模型方法可以以两种方式执行:
当一个回调函数:

  • 被传递,操作将立即执行,结果传递到回调函数。

  • 不传递,则返回一个Query实例,为您提供一个特殊的QueryBuilder接口。
    让我们来看看当传递回调时会发生什么:

    let Schema = mongoose.Schema;
    let schema = new Schema({
        name:String,
        age:Number,
        occupation:String
    });
    let Person = mongoose.model('Person',schema);
    let man = new Person({
        name:'noshower',
        age:22,
        occupation:'teacher'
    });
    man.save(function(err,man){
        if(err){
            return console.error(err);
        }
        console.log(man);// { __v: 0,name: 'noshower',age: 22,occupation: 'teacher',_id: 587a0234a693c31ed46c4885 }
    // 查找名叫‘noshower'的人,选择“名字”和“职业”字段
        Person.findOne({"name":"noshower"},'name occupation',function(err,man){
            console.log(man);//{ _id: 587a02251d73bb1ec61ace04, name: 'noshower', occupation: 'teacher' }
        });
    });
    

这里我们看到查询立即执行,结果传递给我们的回调。 Mongoose中的所有回调都使用模式:callback(error,result)。如果执行查询时发生错误,则error参数将包含错误文档,结果将为null。如果查询成功,error参数将为null,并且result将填充查询的结果。

任何地方回调被传递到Mongoose中的查询,回调函数都遵循这个模式callback(err,result)。result取决于操作:对于findOne(),它是一个单个文档,对于find()它是文档列表,对于count()它是文档数,对于update()它是受影响的文档数等等。

现在让我们看看当没有回调被传递时会发生什么:

  let Schema = mongoose.Schema;
    let schema = new Schema({
        name:String,
        age:Number,
        occupation:String
    });
    let Person = mongoose.model('Person',schema);
    //找出一条名叫"noshower"的文档
    let query = Person.findOne({name:'noshower'});
    //选择"name""occupation"字段
    query.select('name occupation');
    //稍后执行查询
    query.exec(function(err,person){
        if(err){
            return console.error(err);
        }
        console.log(person);//{ _id: 587a02251d73bb1ec61ace04, name: 'noshower', occupation: 'teacher' }
    });

你可能感兴趣的:(mongoose学习笔记5之Queries)