2016-04-21 8 views
0

Dies ist eine sehr ähnliche Frage auf Stackoverflow, aber aus irgendeinem Grund funktioniert das nicht. Ich habe viel Zeit ohne Erfolg verbracht.Aggregieren mit Sortieren eines Datums funktioniert nicht

Hier ist meine Sammlung Setup

{ 
"_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") 
    } 
] 

}

und hier ist mein Code snipper mit Mungo

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

}); 

Danke,

+0

Was genau ist * „funktioniert nicht“ *? Was erwartest du zu passieren? –

+0

Mögliches Duplikat von ["Sortierung nach maximalem Array-Feld, aufsteigend oder absteigend"] (http://stackoverflow.com/questions/35374433/sorting-by-maximum-array-field-ascending-or-descending/) –

+0

@NeilLunn : Ergebnisse werden sortiert nach Datum – user2596892

Antwort

0

ich hier zwei Fragen zu sehen.

  1. Ihre Übereinstimmung stimmt nicht mit Ihrer Datenstruktur überein. Sie sollten statt users gegen message.user Prüfung werden:

    { "$match": { "messages.user": {'$in':[objId]}} } 
    
  2. Sie testen einen ObjectId verwenden, die die _id Feld übereinstimmen und nicht die user Feld. Sie sollten gegen 570d2308ba5bc6842242e881, nicht 5715acfcf1dbdc7c0ae94379 testen.

Wenn Sie gegen _id testen möchten, dann Spiel würde wie folgt aussehen:

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

entschuldige mich, ich habe meine Sammlungsdaten aktualisiert. Bitte lassen Sie es mich wissen, wenn Sie wissen, was vor sich geht. – user2596892

Verwandte Themen