对日期排序无效的汇总

时间:2016-04-21 23:02:31

标签: node.js mongodb sorting mongoose aggregation-framework

这是关于stackoverflow的一个非常类似的问题,但由于某种原因,这不起作用。我花了很多时间没有成功。

这是我的收藏设置

{ 
"_id" : ObjectId("5715acfcf1dbdc7c0ae94379"), 
"users":[ObjectId("570d2308ba5bc6842242e881"), 
         ObjectId("570d7e4b369ac0c525e98331")
         ],
"messages" : [
    {
        "user" : ObjectId("570d2308ba5bc6842242e881"), 
        "message" : NumberInt(0), 
        "readInd" : "N", 
        "createDate" : ISODate("2016-04-19T03:59:12.587+0000"), 
        "_id" : ObjectId("5715ad10f1dbdc7c0ae94396")
    }, 
    {
        "user" : ObjectId("570d2308ba5bc6842242e881"), 
        "message" : NumberInt(1), 
        "readInd" : "N", 
        "createDate" : ISODate("2016-04-19T04:11:10.541+0000"), 
        "_id" : ObjectId("5715afdef36f23a10ad12348")
    }, 
    {
        "user" : ObjectId("570d2308ba5bc6842242e881"), 
        "message" : NumberInt(2), 
        "readInd" : "N", 
        "createDate" : ISODate("2016-04-19T04:11:11.756+0000"), 
        "_id" : ObjectId("5715afdff36f23a10ad12352")
    }
]

}

这是我的代码片段与mongoose

var objId = new ObjectID("5715acfcf1dbdc7c0ae94379");

chatModel.aggregate([
    { "$match": { "users": {'$in':[objId]}} },
    {
        "$project": {
            "messages":1
        }

    }
    ,{"$sort": {"messages.createDate": -1} }
],function(err,records) {
    if (err) {
        return res.json({status: false, errCode: 900, errMsg: err});
    }

    res.json({status:true,resData:records}) ;

});

谢谢,

1 个答案:

答案 0 :(得分:0)

我在这里看到两个问题。

  1. 您的匹配项与您的数据结构不符。您应该针对message.user而不是users进行测试:

    { "$match": { "messages.user": {'$in':[objId]}} }
    
  2. 您正在使用与_id字段匹配的ObjectId进行测试,而不是user字段。您应该针对570d2308ba5bc6842242e881进行测试,而不是5715acfcf1dbdc7c0ae94379

  3. 如果您想针对_id进行测试,那么您的匹配将如下所示:

    { "$match": { "_id": {'$in':[objId]}} }