2016-05-27 19 views
1

Ich habe Array in einem Dokument, und ich versuche, das letzte Element dieses Arrays zu erhalten.Holen Sie sich nur das letzte Element des Arrays Mungo

Mein Code ist:

Post.find({_id:postId},{'comments':{'$slice':-1}}); 

das gibt mir all das Objekt aber die Kommentare Array enthält nur das letzte Element.

auf der anderen Seite,

Post.find({_id:postId},{'comments':1}); 

mir geben nur die Kommentare.

Ich finde nicht, wie man die zwei Befehle zusammen kombiniert. Wie kann es gemacht werden?

{ 
"users":[], 
"comments":["string1","string2","string3"], 
"lastValue":"Wow" 
"name":"jow" 
"_id": { 
    "$oid": "5747d6bdecfae9d0560077cc" 
    }, 
} 

Dank

+1

Können Sie bitte Beispieldokument aus Ihrer Sammlung hinterlassen ? – Sandesh

+0

Was ist Ihr Ziel? Aus welchem ​​Array möchten Sie das letzte Element abrufen? – Sandesh

+0

"comments": ["string1", "string2", "string3"], – Alon

Antwort

2

Vielleicht möchten mongodb verwenden (Version 3.2) Aggregation $slice wie folgt aus:

Post.aggregate([ 
    { 
    $match: { 
     '_id.$oid': postId 
    } 
    }, 
    { 
    $project: { 
     comments: { 
     $slice: [ "$comments", -1 ] 
     } 
    } 
    } 
]); 

In früheren Versionen von mongodb:

Post.aggregate([ 
    { 
    $match: { 
     '_id.$oid': postId 
    } 
    }, 
    { 
    $unwind: "$comments" 
    }, 
    { 
    $group : { 
     _id: "$_id.$oid", 
     comment: { $last: "$comments" } 
    } 
    } 
]); 
+0

Das ist fast funktioniert, ich benutze die zweite, aber ihr Problem ist mit der _id es nicht die _id finden. wenn ich die _id: postId entferne, erhalte ich die letzte von jedem Element .. – Alon

+0

@Alon in deinem Beispiel suchst du '{_id: postId}', aber in dem gegebenen Beispiel gibt es '$ oid'. Alles, was Sie brauchen, ist die Angabe einer gültigen Sammlungs-ID in den Feldern $ group _id und $ match. Die Antwort wurde aktualisiert. –

+0

Ihre Lösung funktioniert nicht, ich habe festgestellt, dass verwenden, _id: mongoose.Types.ObjectId (postId) funktioniert – Alon

0

Ich hoffe, das hilft.

db.Post.find({_id:postId},{'comments':{'$slice':-1},_id:0,users:0,lastValue:0,name:0}); 
+0

Ich hoffte, dass sie etwas Einfachstes sind, denn wenn ich etwas zum Schema hinzufüge, muss ich auch diese Zeile ändern. – Alon

Verwandte Themen