我有一个名为post的集合,其中引用了另外两个集合:状态,格式
post:
{
"_id" : ObjectId("5d7c1c4549c5e277395871ad"),
"status" : {
"$ref" : "status",
"$id" : ObjectId("status123")
},
"format" : {
"$ref" : "format",
"$id" : ObjectId("format123")
}
}
status:
{
"_id" : ObjectId("status123"),
"name" : "Draft"
}
format:
{
"_id" : ObjectId("format123"),
"name" : "Standard"
}
我想查询的帖子返回以下内容:
post:
{
"_id" : ObjectId("5d7c1c4549c5e277395871ad"),
"status" : {
"_id" : ObjectId("status123"),
"name" : "Draft"
},
"format" : {
"_id" : ObjectId("format123"),
"name" : "Standard"
}
}
我的Mongo查询应该是什么?我是使用MongoDB的新手,非常感谢您的帮助。
谢谢莎士
对你的问题
你可以这样
db.post.aggregate([
{$project :
{ status:
{$arrayElemAt:
[{$objectToArray:"$status"},1]
},
format:
{$arrayElemAt:
[{$objectToArray:"$format"},1]
}}},
{$project:
{status:"$status.v" ,
format:"$format.v"}
},
{$lookup :
{from :"status" ,
localField : "status",
foreignField:"_id" ,
as :"status"}
},
{$lookup:
{from :"format" ,
localField:"format",
foreignField:"_id",
as:"format"}
},
{$unwind :"$status"},
{$unwind:"$format"}
])
结果看起来像
{ "_id" : ObjectId("5d7c1c4549c5e277395871ad"),
"status" : {
"_id" : ObjectId("5d7c4af7c45316e35251a499"),
"name" : "Draft"
},
"format" : {
"_id" : ObjectId("5d7c4b21c45316e35251a49a"),
"name" : "Standard"
}
}
说明
stage1:用于$objectToArray
将文档转换为数组,我们用它转换DBref;
stage2:使用$arrayElemAt
with$project
来获取链接的“ _id”。
stage3:用于$lookup
连接两个集合
stage4:用于$unwind
获取内部文档。从输入文档中解构数组字段以为每个元素输出文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句