Mongoose - find({},cb)和find({})之间的区别是什么.exec(cb)?

时间:2016-02-10 14:03:28

标签: node.js mongodb mongoose

我找到了两种使用mongoose find()执行查询的方法,但是想知道它们是不同的:

我们应该何时使用:

Model.find({},cb)

我们什么时候应该使用:

Model.find({}).exec(cb)

2 个答案:

答案 0 :(得分:1)

不同之处在于第一个执行查询并调用您的回调。而在省略回调的第二个中,查询将不会被执行。相反,它将返回一个Query对象,可用于链接方法,指定搜索项和游标选项等...

http://mongoosejs.com/docs/2.7.x/docs/query.html

如果您不需要对基础Cursor进行任何类型的链接或任何其他操作,那么只需使用第一种方法。

但是第二种方法可以帮助做以下事情:

findCars : function(options, callback) {
    var query = Model.find({});

    if(options.limit) query.limit(options.limit);
    if(options.skip) query.limit(options.skip);

    if(options.populate) query.populate(options.populate);

    return query.exec(callback);
}

答案 1 :(得分:1)

两者都执行查询,然后运行回调。

主要区别在于第一个对象返回Query个对象,而第二个对象返回Promise,如果您需要承诺,这将非常有用。

const query = Model.find({}, cb);

然后您可以使用query变量。

虽然承诺......

const promise = Model.find({}).exec();

然后,您可以使用承诺并执行以下操作:

promise.then(cb);
promise.catch((err) => {
  console.error(err);
});

但是如果你做Model.find({}).exec(cb);,也会在不使用promises的情况下调用回调...

我希望它有所帮助