MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Текстово търсене на вложен обект в mongoDB

С рамката за агрегиране може да изглежда така

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

което ще доведе до следния изход за вашите примерни данни:

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

Ако имате нужда от единичен масив с получените документи, както е показано във вашия въпрос, можете просто да ланцуговате toArray() извикване в края на конвейера - имайте предвид обаче, че това може да доведе до увеличено потребление на памет в случай на големи набори от резултати, както е посочено от SSDMS в коментарите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. htmlspecialchars премахнете стойността вътре в масива?

  2. Най-лесният начин да копирате/клонирате екземпляр на документ от мангуста?

  3. Как да премахнете дубликати с определено условие в mongodb?

  4. MongoDB $inc

  5. Има ли многоядрена експлоатираща NoSQL система?