sql >> Database >  >> NoSQL >> MongoDB

Mongodb-aggregatie:alleen overeenkomende elementen van een array retourneren?

U kunt dit doen met het 2.2 aggregatieraamwerk. Zoiets;

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",
            },
        },
    ],
})

Of dit komt misschien nog dichter in de buurt van wat u zoekt als u de array echt zonder het document wilt;

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. Mongoosejs een document vernieuwen

  2. Meteor:een object vinden uit een verzameling door _id

  3. Waarom krijg ik een niet-herkend argument tot nu toeFromString:'format' ondanks dat ik db-versie> 3.6 heb die de aggregatie ondersteunt

  4. Zoekopdrachten in MongoDB