0

Ich möchte eine Kontaktliste auf der Grundlage der letzten Nachrichten zusammengestellt oder von einem Kontakt erhalten. Um dies zu tun, muss ich die letzten Nachrichten (sowohl gesendet als auch empfangen) sortieren, sie hinzufügen und die letzte zurückgeben.Mongoose finden die letzten Nachrichten Gruppierung von zwei Feldern

Meine Antwort in folgendem Format sein sollte:

{ 
    "success": true, 
    "chatlist": [ 
    { 
     "id_user": "54228fe2c0df8d1120ed091b", 
     "lastMessage": { 
     "content": "message 6", 
     "date": "2016-11-09T02:54:41.687Z" 
     }, 
     "unreadMessages": 3, 
     "name": "user 1" 
    }, 
    { 
     "id_user": "12228fe2c0df8d11204g4d", 
     "lastMessage": { 
     "content": "message 3", 
     "date": "2016-11-09T02:54:23.329Z" 
     }, 
     "unreadMessages": 2, 
     "name": "user 2" 
    }, 
    { 
     "id_user": "58228fe2c0df8d1120e12sd", 
     "lastMessage": { 
     "content": "message 1", 
     "date": "2016-11-09T02:54:19.313Z" 
     }, 
     "unreadMessages": 1, 
     "name": "user 3" 
    } 
    ], 
    "pages": 2 
} 

Mein Benutzer Schema ist:

var schema = new Schema({ 
    name: {type: String, required: true}, 
    email: {type: String, required: true, unique: true}, 
    password: {type: String, required: true, select: false}, 
    created_at: {type: Date, required: true, default: Date.now} 
}); 

Meine Nachricht Schema ist:

var schema = new Schema({ 
    content: {type: String, required: true}, 
    type: {type: String, required: true, default: 'text'}, 
    status: {type: String, default: 'not_read'}, 
    created_at: {type: Date, default: Date.now}, 
    read_at: {type: Date}, 
    userFrom: {type: Schema.Types.ObjectId, ref: 'User', required: true}, 
    userTo: {type: Schema.Types.ObjectId, ref: 'User', required: true} 
}); 

ich diese tryed haben:

Wie kann ich meine Abfrage ändern, um die gewünschte Antwort zu erhalten? Danke.

Antwort

0

Versuchen Sie, diese

var itensPerPage = 15; 
var skip = page !== undefined ? page * itensPerPage : 0; 
pages = Math.ceil(pages/itensPerPage); 

Message 
.aggregate([ 
    { '$sort': { 
     'created_at': -1 
    }}, 
    { "$skip": skip }, 
    { "$limit": itensPerPage }, 
    { '$match': { 
     $or: [ 
      { userFrom: user.id_user }, 
      { userTo: user.id_user } 
     ] 
    }}, 
{$unwind : $chatlist}, 
{$sort : {chatlist.date : -1}}, 
{$group : {_id : $_id},chatlist : {$push : $chatlist}}, 
]) 
.exec(function (err, messages) { 
    res.send({"success": true, "chatlist": messages, "pages": pages}); 
}); 
+0

ich den Fehler bekam: "Fehler: Argumente müssen Aggregat Pipeline-Betreiber sein" – Renan

Verwandte Themen