2016-04-21 56 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