在mongoose中使用skip后无法对数据进行排序

时间:2018-01-31 17:18:22

标签: node.js mongodb sorting

这是我使用的查询: -

 var retrieveQuery = function(callback){
               Product.find(qry).skip((pageNumber-1)*12).sort({sortby: -1}).limit(12).exec(function(err, doc){
                if(err){ callback(err, null) }
                else{
                    callback(null, doc);
                 }
          });

          };

此处qrylet qry=JSON.parse(decodeURIComponent(req.params.query));
我发送的网址为/p3nhv/%7B %7D/lastEdit/1,表示/:token/:query/:sortby/:page 得到的结果是未分类的,
疑惑:

  1. 是整理数据还是我要检索的唯一特定数据集?
  2. 跳过包含在sort?
  3. 中的数据集

    这是我的mongo数据: -

    {
    "_id": {
        "$oid": "5a71eb6339add500269e4be1"
    },
    "editTime": {
        "$date": "2018-01-31T16:14:27.000Z"
    },
    "userName": "Toshik Verma",
    "userId": {
        "$oid": "5a0def6859465800269e9b5e"
    },
    "city": {
        "$oid": "5a0969adca18d8fd03d57d2c"
    },
    "college": {
        "$oid": "5a0969adca18d8fd03d57d2c"
    },
    
    "lastEdit": {
        "$date": "2018-01-31T16:14:27.605Z"
    },
    "productDescription": "test test test test test test test test test test test test test test test test ",
    "pageView": 0,
    "time": {
        "$date": "2018-01-31T16:14:27.605Z"
    },
    "__v": 0
    

    }

    lastEdit排序不知道我做了什么错误似乎很好,任何帮助都会很棒,谢谢

2 个答案:

答案 0 :(得分:2)

排序将在应用skiplimit之前进行,但您当前正在按名为“sortby”的(不存在的)字段排序,而不是字段名称 sortby中包含

改为使用计算属性语法:

.sort({[sortby]: -1})

或者使用Mongoose支持的基于字符串的备用排序语法:

.sort('-' + sortby)

答案 1 :(得分:1)

我们将这些约束(跳过,排序,限制)应用于游标的顺序无关紧要MongoDB将始终排序第一,跳过第二个并限制第三个以便跳过限制和排序或我应该在节点js驱动程序中说排序跳过和限制。因此,您 限制 滑雪 数据集,您将 跳过 您的 订购 数据集。

Here这是一篇非常好的文章。

所以,你的怀疑:

  

是整理数据还是我要检索的唯一特定数据集?

答:整个数据

  

跳过包含在sort?

中的数据集

答:是的