从一组id中查找第一个匹配的文档

时间:2018-03-11 05:00:25

标签: mongodb mongoose nosql mongodb-query aggregation-framework

我们说我在一个集合中有以下文件"包":

{ _id: "animals"}
{ _id: "sillyanimals", extends: ["animals"] }

这些文件是另一个集合"事物":

{ _id: 1, thing: "dog", pack: "animals", bark: true, silly: false}
{ _id: 2, thing: "cat", pack: "animals", bark: false, silly: false }
{ _id: 3, thing: "dog", pack: "sillyanimals", silly: true }

我怎么能得到" cat"从包装" sillyanimals"用一个查询?它应该返回id _2,因为sillyanimals扩展了动物。

另外,当我搜索一只"狗"在" sillyanimals" pack,我如何获得将id _1和id _3与单个查询相结合的结果? _3的属性应优先,并覆盖_1。

的属性

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此查询“cat”:

db.getCollection('packs').aggregate([
{
   $lookup:
     {
       from: 'things',
       localField: 'extends',
       foreignField: 'pack',
       as: "inherited"
     }
}
,{$unwind:"$inherited"}
,{$match:{"inherited.thing":"cat"}}    //1)Set "dog"
,
{
   $lookup:
     {
       from: 'things',
       localField: '_id',
       foreignField: 'pack',
       as: "content1"
     }
}
,{$unwind:"$content1"}

,{
         $project:
           {

             properties:
               {

                   $cond: {
                        if: {
                          $eq: ['$content1.thing', "cat"]   //2)set dog
                        },
                        then: "$content1",
                        else: "$inherited",
                      }
               }
           }
}

])

如果搜索“dog”,请更改1)和2)中的参数