sql >> Databasteknik >  >> NoSQL >> MongoDB

Kapslad objekttextsökning i mongoDB

Med aggregeringsramverket skulle det kunna se ut så

db.getCollection('yourCollection').aggregate([
    {
        $unwind: '$arr'
    },
    {
        $match: {
            $or: [
                { 'arr.name': /world/i },
                { 'arr.description': /world/i }
            ]
        }
    },
    {
        $project: {
            _id: '$arr._id',
            name: '$arr.name',
            description: '$arr.description'
        }
    }
])

vilket kommer att resultera i följande utdata för dina exempeldata:

{
    "_id" : 1,
    "name" : "Random",
    "description" : "Hello world"
}
{
    "_id" : 2,
    "name" : "World",
    "description" : "This is a random description"
}  

Om du har behov av en enda array med de resulterande dokumenten som visas i din fråga, kan du helt enkelt kedja en toArray() samtal i slutet av pipelinen - kom dock ihåg att detta kan orsaka ökad minnesförbrukning vid stora resultatuppsättningar som påpekats av SSDMS i kommentarerna.




  1. Mongoose skickar data från withTransaction helper

  2. Installera Redis på CentOS 7

  3. Starta redis-server med konfigurationsfil

  4. Påminnelsekommando med MongoDB discord.py