2016-04-21 61 views
0

这是一个非常类似的问题在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") 
    } 
] 

}

,这里是我的猫鼬

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}) ; 

}); 

感谢代码剪断,

+0

那么究竟什么是*“不工作” *?你期望发生什么? –

+0

[“通过最大数组字段进行排序,升序或降序”]可能重复(http://stackoverflow.com/questions/35374433/sorting-by-maximum-array-field-ascending-or-descending/) –

+0

@NeilLunn :结果按日期排序 – user2596892

回答

0

我看到两个问题在这里。

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

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

如果你想测试对_id那么你的比赛将是这样的:

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

道歉,我更新了我的收藏数据。如果你知道发生了什么,请告诉我。 – user2596892