sql >> Databáze >  >> NoSQL >> MongoDB

Textové vyhledávání vnořených objektů v mongoDB

S agregačním rámcem by to mohlo vypadat takto

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'
        }
    }
])

což bude mít za následek následující výstup pro vaše ukázková data:

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

Pokud potřebujete jediné pole s výslednými dokumenty, jak je uvedeno ve vaší otázce, můžete jednoduše zřetězit toArray() volání na konci kanálu – mějte však na paměti, že to může způsobit zvýšenou spotřebu paměti v případě velkých sad výsledků, jak upozorňuje SSDMS v komentářích.




  1. MongoDB - Aktualizace pouze $ref z typu pole DBRef

  2. MongoDB $pow

  3. MongoDB MapReduce:Nefunguje podle očekávání pro více než 1000 záznamů

  4. jak mohu předat nekonečno do redis z pythonu?