【问题标题】:How to execute sort and limit query together with mongoose?如何与猫鼬一起执行排序和限制查询?
【发布时间】:2017-03-03 12:55:18
【问题描述】:

我有一个用node编写的方法如下从集合中查询

  query: function (model, conditon, options) {
            console.log(conditon, options);
            return new Promise(function (resolve, reject) {
                options = options || {};

                model.find(conditon, {}, options).exec(function (error, data) {
                    if (error)
                        reject(error);
                    resolve(data);
                })
            })
        }

我想获取以下查询的数据,

db.getCollection('_event').find({}).sort({'metadata.popularity': 1}).limit(10)

我应该如何修改上面的方法来支持这个查询?

这就是我从另一个文件中调用查询函数的方式,

 dbService.query(eventModel, { 'eventId': idRetrieved }, {});
 }).then(data => dbService.disconnectDb(data))
    .then(data => callback(data))
     .catch((error) => {
          dbService.disconnectDb(error).then(error => {
          console.log(error);
          callback({}, error);
})

【问题讨论】:

  • exec 如果您不提供回调,则返回一个 Promise,那么您为什么要创建自己的 Promise?无论如何,sort和limit参数从何而来?
  • @JohnnyHK 限制和排序我在 mongo db 上执行,我想知道如何更改上述代码以支持它?

标签: node.js mongodb mongoose


【解决方案1】:

只需对从find 调用返回的Query 对象调用sortlimit

但您不需要创建自己的Promise,因为如果您不提供回调,exec 已经返回了一个承诺。

function (model, condition, options, sort, limit) {
    return model.find(condition, {}, options).sort(sort).limit(limit).exec();
}

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2012-09-30
    • 2020-08-25
    • 2022-12-05
    • 2018-11-28
    • 1970-01-01
    • 2018-10-14
    • 2014-11-13
    • 2020-09-14
    相关资源
    最近更新 更多