sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man söker under arrayer i MongoDB

Om du bara vill ha en så har MongoDB "dot notation" för åtkomst av kapslade element:

db.collection.find({ "to.email": "[email protected]" })

Och detta kommer att returnera dokument som matchar:

För mer det ena fältet som ett villkor, använd $elemMatch operatör

db.collection.find(
    { "to": { 
        "$elemMatch": { 
            "email": "[email protected]",
            "name": "domains",
        }
    }}
)

Och du kan "projicera" en singel matcha för att bara returnera det elementet:

db.collection.find({ "to.email": "[email protected]" },{ "to.$": 1 })

Men om du förväntar dig mer än ett element för att matcha, då använder du aggregeringsramverket:

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" }            
    }}

])

Alla roliga sätt att matcha och/eller "filtrera" innehållet i en array för matchningar om det behövs.




  1. Mongodb får sista kombinationen i aggregeringsramverket

  2. Vad är standard mongod write concern i vilken version?

  3. Relativ import av ett paket i python-flaskapplikation

  4. Mongodb 2dsphere-index för kapslade arrayfält