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": "example@sqldat.com" })

En dit levert documenten op die overeenkomen:

Voor meer dat ene veld als voorwaarde, gebruik de $elemMatch telefoniste

db.collection.find(
    { "to": { 
        "$elemMatch": { 
            "email": "example@sqldat.com",
            "name": "domains",
        }
    }}
)

En je kunt een enkele . projecteren match om dat element gewoon terug te geven:

db.collection.find({ "to.email": "example@sqldat.com" },{ "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": "example@sqldat.com" } },

    // De-normalizes the array
    { "$unwind": "$to" },

    // Matches only those elements that match
    { "$match": { "to.email": "example@sqldat.com" } },

    // 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?