sql >> Database >  >> NoSQL >> MongoDB

Hoe sub-arrays in MongoDB te doorzoeken?

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.




  1. Hoe document te vinden op onderdelen van ObjectId?

  2. Hoe krijg ik alle sleutels in Redis

  3. Mongodb Waarde verhogen binnen geneste array

  4. Hoe moet de volgende veel-op-veel-relatie worden gemodelleerd in MongoDB?