MongoDB-query mit elemMatch für verschachtelte array-Daten
Ich habe ein Dokument mit verschachtelten array-Daten. Ich habe versucht, hoffnungslos das filtern der Daten mit $elemMatch
aber ich kann nicht herausfinden, warum es nicht funktioniert.
{
'id' : 1,
'name' : 'test',
'modules' : [
{
name: 'foo',
mandatory: false,
group: [
{
name: g1
}]
},
{
name: 'bar',
mandatory: false,
group: [
{
name: g2
}]
}]
}
Versuchte ich mit dieser Abfrage:
db.test.find(
{
modules: {
$elemMatch: {
name: "foo",
}
}
}
Aber es hält Rückkehr alle Module. Wenn ich mandatory: true
es gibt nichts, das scheint angezeigt, dass es funktioniert. Irgendeine Idee, was ich falsch mache? Danke!
- Die Abfrage ist sehr einfach, aber was ist mit updates?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Anfrage ist einfach Rücksendung alle docs, die eine
modules
- element, woname == 'foo'
. Verwenden$elemMatch
filtert die Ausgabe, die Sie brauchen, um es in der Projektion argument derfind
aufrufen, statt Teil der Abfrage:Kombinieren beider Konzepte, Sie können auf den index des array-Elements abgestimmt in der Abfrage mit
$
:Entweder Weg gibt:
Wenn Sie andere Felder in der Ausgabe enthalten ist, fügen Sie die Projektion-Objekt (z.B.
name: 1
).elemMatch
? Zum Beispiel für filter auf der "group" - Liste auf den Namen?