Als je er maar één wilt veld dan heeft MongoDB "puntnotatie" voor toegang tot geneste elementen:
db.collection.find({ "to.email": "[email protected]" })
En dit levert documenten op die overeenkomen:
Voor meer dat ene veld als voorwaarde, gebruik de $elemMatch
telefoniste
db.collection.find(
{ "to": {
"$elemMatch": {
"email": "[email protected]",
"name": "domains",
}
}}
)
En je kunt een enkele . projecteren match om dat element gewoon terug te geven:
db.collection.find({ "to.email": "[email protected]" },{ "to.$": 1 })
Maar als je meer verwacht dan één element te matchen, dan gebruikt u het aggregatieraamwerk:
db.collection.aggregate([
// Matches the "documents" that contain this
{ "$match": { "to.email": "[email protected]" } },
// De-normalizes the array
{ "$unwind": "$to" },
// Matches only those elements that match
{ "$match": { "to.email": "[email protected]" } },
// Maybe even group back to a singular document
{ "$group": {
"_id": "$_id",
"from_name": { "$first": "$name" },
"to": { "$push": "$to" },
"subject": { "$first": "$subject" }
}}
])
Allemaal leuke manieren om de inhoud van een array te matchen en/of te "filteren" op matches indien nodig.