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

Как да получите всички стойности, които съдържат част от низ, използвайки mongoose find?

Почти сам си отговорил на това в своите тагове. MongoDB има $regex оператор, който позволява регулярен израз да бъде подаден като заявка. Така че, ако търсите низове, съдържащи "Alex", правите това:

Books.find(
    { "authors": { "$regex": "Alex", "$options": "i" } },
    function(err,docs) { 
    } 
);

Можете също да направите това:

Books.find(
    { "authors": /Alex/i }, 
    function(err,docs) { 

    }
);

И двете са валидни и различни от начина, по който сте опитали в правилния поддържан синтаксис, както е показано в документацията.

Но разбира се, ако всъщност питате „как да получите резултатите от „масив“ само за тези, които съвпадат с „Алекс“ някъде в низа?“ тогава това е малко по-различно.

Сложно съвпадение за повече отедно Елементът на масива е домейнът на рамката за агрегиране (или вероятно mapReduce, но това е много по-бавно), където трябва да „филтрирате“ съдържанието на масива.

Започвате почти същото. Ключът тук е да $unwind да "денормализира" съдържанието на масива, за да може да "филтрира" правилно като отделни документи. След това повторно конструирайте масива със "съвпадащите" документи.

Books.aggregate(
    [
        // Match first to reduce documents to those where the array contains the match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Unwind to "de-normalize" the document per array element
        { "$unwind": "$authors" },

        // Now filter those document for the elements that match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Group back as an array with only the matching elements
        { "$group": {
            "_id": "$_id",
            "title": { "$first": "$title" },
            "authors": { "$push": "$authors" },
            "subjects": { "$first": "$subjects" }
        }}
    ],
    function(err,results) {

    }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Запазване на numpy масив в mongodb

  2. Изключение, удостоверяващо MongoCredential и некатегоризирано Mongo Db Exception

  3. как мога да видя какви портове mongo слуша от mongo shell?

  4. Как да изключите от резултатите от търсенето документи с полета, които не присъстват в заявката?

  5. Mongoose - намиране на поддокументи по критерии