美文网首页mongoDBmongoose
mongoose学习笔记5之Queries

mongoose学习笔记5之Queries

作者: 打铁大师 | 来源:发表于2017-01-14 19:43 被阅读31次

    假设以下代码都运行在

    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

        本文链接:https://www.haomeiwen.com/subject/tvoebttx.html