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

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

Можете да използвате $elemMatch като оператор за проекция на заявка в най-новите версии на MongoDB. От черупката на монго:

db.parents.find(
    {'children.age': {$gte: 18}},
    {children:{$elemMatch:{age: {$gte: 18}}}})

Това филтрира документите на по-малките деца от children масив:

{ "_id" : ..., "children" : [ { "name" : "Margaret", "age" : 20 } ] }
{ "_id" : ..., "children" : [ { "name" : "John", "age" : 22 } ] }

Както можете да видите, децата все още са групирани в техните родителски документи. Заявките на MongoDB връщат документи от колекции. Можете да използвате $unwind на рамката за агрегиране метод за разделянето им на отделни документи:

> db.parents.aggregate({
    $match: {'children.age': {$gte: 18}}
}, {
    $unwind: '$children'
}, {
    $match: {'children.age': {$gte: 18}}
}, {
    $project: {
        name: '$children.name',
        age:'$children.age'
    }
})
{
    "result" : [
        {
            "_id" : ObjectId("51a7bf04dacca8ba98434eb5"),
            "name" : "Margaret",
            "age" : 20
        },
        {
            "_id" : ObjectId("51a7bf04dacca8ba98434eb6"),
            "name" : "John",
            "age" : 22
        }
    ],
    "ok" : 1
}

Повтарям $match клауза за изпълнение:първия път чрез нея елиминира родителите сне деца на възраст поне 18 години, така че $unwind разглежда само полезни документи. Вторият $match премахва $unwind изход, който не съвпада, и $project издига информация за децата от поддокументи на най-високо ниво.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. В Mongoose как да сортирам по дата? (node.js)

  2. Как да актуализирам, ако съществува, в противен случай вмъкнете нов документ?

  3. Десериализиране на полиморфни типове с MongoDB C# драйвер

  4. Променете типа на полето в агрегирането на mongoDB и използва ли $lookup индекс върху полета или не?

  5. MongoDB $orderBy