sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan søger du under arrays i MongoDB

Hvis du kun vil have én felt, så har MongoDB "dot notation" for at få adgang til indlejrede elementer:

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

Og dette vil returnere dokumenter, der matcher:

For mere det ene felt som betingelse, brug $elemMatch operatør

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

Og du kan "projektere" en enkelt match for bare at returnere det element:

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

Men hvis du forventer mere end én element til at matche, så bruger du aggregeringsrammen:

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

])

Alle sjove måder at matche på og/eller "filtrere" indholdet af et array for match, hvis det kræves.




  1. Parsing af en lang forespørgselsstreng direkte til MongoDB (ligesom du kan i SQL)

  2. kan ikke hente data fra databasen efter flere skemaer erklæret (mongoose + express + mongodb

  3. MongoDb-forespørgsel for at få maks. felt inde i array

  4. Sådan bestiller du MongoDB Aggregation med match, sortering og grænse