sql >> Databáze >  >> NoSQL >> MongoDB

Jak hledat dílčí pole v MongoDB

Pokud chcete pouze jeden pole pak MongoDB má "tečkovou notaci" pro přístup k vnořeným prvkům:

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

A toto vrátí dokumenty, které se shodují:

Pro více toto jedno pole jako podmínku použijte $elemMatch operátor

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

A můžete „promítnout“ single match, aby se vrátil pouze tento prvek:

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

Pokud ale očekáváte více než jeden prvek, který se má shodovat, pak použijete agregační rámec:

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

])

Všechny zábavné způsoby, jak v případě potřeby porovnávat a/nebo „filtrovat“ obsah pole pro shody.




  1. Jedinečné dokumenty v kolekci MongoDB

  2. Aktualizace tečkového pole Mongodb

  3. Chyba:Route.post() vyžaduje funkce zpětného volání, ale má [objekt nedefinovaný]

  4. Jak vytvořit partnerský vztah mezi MongoDB Atlas a Google App Engine Standard Environment Node App