Meine erste Sammlung employeecategory
ist wie folgt;Aggregationsfilter und Lookup auf Mongodb
[{
name: "GARDENING"
},
{
name: "SECURITY"
},
{
name: "PLUMBER"
}
]
Meine zweite Sammlung complaints
ist wie folgt;
[{
communityId: 1001,
category: "SECURITY",
//other fields
}, {
communityId: 1001,
category: "GARDENING",
//other fields
}]
Ich versuche, oben genannten Tabellen beizutreten und das folgende Ergebnis zu erhalten;
Auch wenn es keine Datensätze in Sammlung 2 gibt, muss ich zählen. Ich habe unter Aggregation versucht, aber nicht funktioniert. Wenn ich die Match-Bedingung entfernt habe, funktioniert es, aber ich muss nach der Community-ID filtern. Könnten einige bitte den besten Weg vorschlagen, dies zu erreichen. Mongo DB-Version ist 3.4.0
db.employeecategory.aggregate(
[{
$match: {
"complaints.communityId": 1001
}
}, {
"$lookup": {
from: "complaints",
localField: "name",
foreignField: "category",
as: "embeddedData"
}
}]
)
Es wäre besser, Text als Bilder zu haben. –
Wie sieht Ihre Ausgabe aus und was erwarten Sie? – Astro
Sie müssen '$ match' ** verwenden, nachdem ** Sie die' $ lookup' ausgeführt haben. Bevor Sie tatsächlich nach $ suchen, gibt es dort keine Daten. Beachten Sie auch, dass Sie den Ausgabepfad 'embeddedData' aufrufen. Alles, was Sie aus den "verbundenen" Daten referenzieren, befindet sich in diesem Pfad. d. h. "embedded.Data.communityId" '. Und beachte, dass das Feld, das von '$ lookup' erzeugt wird, ein" Array "ist, also musst du es" abwickeln ". Wenn Sie hier einfach das Zeichen "$ match" entfernen, wird Ihnen zumindest angezeigt, wie die "verbundene Ausgabe" aussieht, und Sie erhalten ein klareres Bild davon, wie Sie vorgehen sollen. –