MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да търсите подмасиви в MongoDB

Ако искате самоедн тогава MongoDB има "нотация с точка" за достъп до вложени елементи:

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

И това ще върне документи, които съответстват на:

За повече това едно поле като условие използвайте $elemMatch оператор

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

И можете да "прожектирате" сингъл match, за да върне този елемент:

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

Но ако очаквате повече отколкото един елемент за съвпадение, тогава използвате рамката за агрегиране:

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

])

Всички забавни начини за съпоставяне и/или „филтриране“ на съдържанието на масив за съвпадения, ако е необходимо.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да свържа низови резултати от множество MongoDB записи в един резултат в MongoDB?

  2. Mongoose намира връщащ се странен обект

  3. Как да вмъкна HTML в Mongodb?

  4. Как да експортирам mongoexport атрибути от масив от обекти в CSV?

  5. Указване на шардирана колекция с Spring Data MongoDB