sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb Aggregation:Hur man returnerar endast matchande element i en array

Du kan göra detta med 2.2-aggregationsramverket. Något sånt här;

db.books.runCommand("aggregate", {
    pipeline: [
        {   // find docs that contain Par*
            $match: { "indexTokens" : { "$regex" : "^Par" , "$options" : "i"}},
        },
        {   // create a doc with a single array elemm for each indexToken entry
            $unwind: "$indexTokens" 
        },
        {   // now produce a list of index tokens
            $group: {
                _id: "$indexTokens",
            },
        },
    ],
})

Eller det här kan vara ännu närmare vad du är ute efter om du verkligen vill ha arrayen utan dokumentet;

db.books.runCommand("aggregate", {
    pipeline: [
        {   // find docs that contain Par*
            $match: { "indexTokens" : { "$regex" : "^Par" , "$options" : "i"}},
        },
        {   // create a doc with a single array elemm for each indexToken entry
            $unwind: "$indexTokens" 
        },
        {   // now throw out any unwind's that DON'T contain Par*
            $match: { "indexTokens": { "$regex": "^Par", "$options": "i" } },
        },
        {   // now produce the list of index tokens
            $group: {
                _id: null,
                indexTokens: { $push: "$indexTokens" },
            },
        },
    ],
})


  1. Så här löser du MongoError:pool förstördes när du ansluter till CosmosDB

  2. MongoDB Aggregation Query- Byt namn på fält som returneras från inbäddade dokument

  3. Node.js + Mongoose fungerar lokalt, men inte på Heroku

  4. Kontrollera om dokumentet finns i mongodb med es7 async/await