如何解决MongoDB Aggregate-如何进行两个“ $ lookup”操作?
我有以下汇总查询:
db.getCollection('village').aggregate([
{
"$match": { _id: "111" }
},{
"$lookup": {
from: "character",localField: "chieftainId",foreignField: "_id",as: "chieftain"
},"$lookup": {
from: "character",localField: "villagerIds",as: "villager"
}
},{ "$project" : { "villagerIds" : 0}}
])
这是它的结果:
{
"_id" : "111","name" : "MyVillage","chieftainId" : "222","reputation" : 0,"villagers" : [
{
"_id" : "333","name" : "Bortan","age" : 21,"bloodlineId" : "7f02191f-90af-406e-87ff-41d5b4387999","villageId" : "foovillage","professionId" : "02cbb10a-6c0f-4249-a932-3f40e12d32c5"
},{
"_id" : "444","name" : "Blendi","bloodlineId" : "b3a8ffeb-27aa-4e2e-a8e6-b382554f326a","professionId" : "45dc9350-c84a-491d-a49a-524834dd5773"
}
]
}
如您所见,villagerIds
已解决为villagers
。但是,chieftainId
尚未解析为chieftain
。当我省略第二个$lookup
(与村民一起)时,chieftain
被成功解析。看来只有一个$lookup
会有效,而不是两者都有效。知道我怎样才能使两者都起作用吗?
解决方法
为$ lookup使用单独的管道
db.getCollection('village').aggregate([
{
"$match": { _id: "111" }
},{
"$lookup": {
from: "character",localField: "chieftainId",foreignField: "_id",as: "chieftain"
}
},{
"$lookup": {
from: "character",localField: "villagerIds",as: "villager"
}
},{ "$project" : { "villagerIds" : 0}}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。