ich ein Dokument haben, das wie folgt aussieht:MongoDB ein Element aus einem Array innerhalb eines Arrays von Objekten entfernen
{
"_id" : ObjectId("56fea43a571332cc97e06d9c"),
"sections" : [
{
"_id" : ObjectId("56fea43a571332cc97e06d9e"),
"registered" : [
"123",
"e3d65a4e-2552-4995-ac5a-3c5180258d87"
]
}
]
}
Ich mag würde die 'e3d65a4e-2552-4995-ac5a-3c5180258d87'
im registered
Array von nur die spezifischen Abschnitt entfernen mit der _id
von '56fea43a571332cc97e06d9e'
.
Mein aktueller Versuch ist so etwas, aber es gibt nur das ursprüngliche Dokument unverändert zurück.
db.test.findOneAndUpdate(
{
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
},
{
$pull: {
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
}
})
Ich habe in zu $pull
sehe, aber ich kann nicht scheinen, um herauszufinden, wie es auf einer Reihe von verschachtelten Objekten zu arbeiten, um ein weiteres Array enthalten. Die $pull
Beispiele scheinen alle nur mit einer Verschachtelungsebene zu arbeiten. Wie entferne ich den übereinstimmenden Eintrag aus dem Array registered
des Elements im Array sections
mit der _id
, die ich liefern?
Wird dies keine Instanz von ' "e3d65a4e-2552-4995-AC5a-3c5180258d87"' in einem der Abschnitte entfernen? Ich möchte nur diese Zeichenfolge aus dem registrierten Array des bestimmten Abschnitts entfernen. – jergason
Ok nach dem Test schien das zu funktionieren, aber ich habe keine Ahnung warum. Woher weiß es, nur den $ pull-Operator auf den spezifischen Abschnitt mit dem passenden '_id' anzuwenden? – jergason
Ok, ich lese eigentlich die Dokumente für '$' wie ein menschliches Wesen. Das macht Sinn. Danke für Ihre Hilfe. – jergason