Mongodb 从ID数组中查找第一个匹配的文档
假设我在一个集合包中有以下文档:Mongodb 从ID数组中查找第一个匹配的文档,mongodb,mongoose,nosql,mongodb-query,aggregation-framework,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: "
{ _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 }
我怎么能用一个简单的问题从一群愚蠢的动物那里得到猫?它应该返回id_2,因为sillyanimals扩展了动物
另外,当我在sillyanimals包中搜索一只狗时,如何得到一个将id_1和id_3与单个查询相结合的结果?_3的属性应优先,并覆盖_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",
}
}
}
}
])
如果搜索狗,请更改1和2中的参数