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

Indlejret objekttekstsøgning i mongoDB

Med aggregeringsrammen kunne det se sådan ud

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

hvilket vil resultere i følgende output for dine eksempeldata:

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

Hvis du har behov for et enkelt array med de resulterende dokumenter som vist i dit spørgsmål, kan du blot kæde en toArray() opkald i slutningen af ​​pipelinen - husk dog, at dette kan forårsage øget hukommelsesforbrug i tilfælde af store resultatsæt som påpeget af SSDMS i kommentarerne.




  1. PHP MongoDB - Brug af den samlede kommando uden markørindstillingen er forældet. Hvad?

  2. Hvordan kan jeg beregne den samlede positive, samlede negative pris og sum ved hjælp af Node.js og Mongoose

  3. Omform dokumenter ved at opdele en feltværdi

  4. Hvorfor skal jeg bruge Redis, når jeg har PostgreSQL som min database til Django?