MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wyszukiwać podtablice w MongoDB

Jeśli chcesz tylko jeden pole wtedy MongoDB ma "notacja z kropkami" dostęp do zagnieżdżonych elementów:

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

A to zwróci pasujące dokumenty:

Aby uzyskać więcej to jedno pole jako warunek, użyj $elemMatch operator

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

I możesz „zaprojektować” singiel dopasowanie, aby po prostu zwrócić ten element:

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

Ale jeśli oczekujesz więcej niż jeden element do dopasowania, a następnie użyj struktury agregacji:

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

])

Wszystkie zabawne sposoby dopasowywania i/lub "filtrowania" zawartości tablicy pod kątem dopasowań, jeśli jest to wymagane.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB C# - Pobieranie BsonDocument dla elementu, który nie istnieje

  2. gdzie wstawić funkcje w codeigniter mongodb

  3. Błąd „mongo.js:L112 Błąd:nie można połączyć się z serwerem 127.0.0.1:27017 w src/mongo/shell/mongo.js:L112”

  4. Unikalny indeks nie działa z Mongoose / MongoDB

  5. MongoDB $group i jawne tworzenie grup z wyliczoną kolumną