我们说我在一个集合中有以下文件"包":
{ _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。
的属性答案 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)中的参数