Ich habe eine Sammlung mit folgendem Format:
{
"_id": 123,
"items": [{
"status" : "inactive",
"created" : ISODate("2016-03-16T10:39:28.321Z")
},
{
"status" : "active",
"created" : ISODate("2016-03-16T10:39:28.321Z")
},
{
"status" : "active",
"created" : ISODate("2016-03-16T10:39:28.321Z")
}
],
"status" : "active"
}
Ich mag auf Status Bereich der Artikel als ‚aktiv‘ so dass das Objekt mit dem Status abzufragen ist nur im Array zurückgegeben und außerdem werden nur die letzten 2 in der Abfrage zurückgegeben.
Derzeit verwende ich $ filter für diese Operation, aber ich bin nicht in der Lage $ slice zusammen mit $ filter (ist was ich denke, benötigt für das, was ich will) zu verwenden. Hier finden Sie, wie meine Frage jetzt aussieht:
db.collection('collection').aggregate([
{$match: {'status': 'active'}},
{
$project: {
'items': {
$filter: {
input: '$items',
as: 'item',
cond: {$eq: ['$$item.status', 'active']
}
}
}
}]);
Was ich jetzt immer korrektes Ergebnis ist, es ist nur, dass es alles gibt die Objekte in dem Artikel Feld und ich möchte nur die letzten 2 Objekte.
Super! Vielen Dank ;) – HVT7