在mongoDB中加入两个集合
我有以下两个系列在mongoDB中加入两个集合,mongodb,join,Mongodb,Join,我有以下两个系列 db.sample.find().pretty() { "_id" : ObjectId("5930093eb3aaa7c02d4cbcdc"), "name" : "Ashish", "posts" : [ { "_id" : ObjectId("59301c3
db.sample.find().pretty()
{
"_id" : ObjectId("5930093eb3aaa7c02d4cbcdc"),
"name" : "Ashish",
"posts" : [
{
"_id" : ObjectId("59301c39028afaf3450e2444"),
"post" : ObjectId("59301c39028afaf3450e2885")
},
{
"_id" : ObjectId("59301c39028afaf3450e2445"),
"post" : ObjectId("59301c39028afaf3450e2889")
}
]
}
还有另外一个
db.posts.find().pretty()
{ "_id" : ObjectId("59301c39028afaf3450e2885"), "title" : "test1" }
{ "_id" : ObjectId("59301c50028afaf3450e2889"), "title" : "test2" }
我想根据匹配的post.\u id和sample.post.\u id值将这两个连接起来。
&创建显示“标题”值的结构,如下所示:
简言之,创建显示每个用户喜欢的帖子的结构
"name" : "Ashish",
"posts" : [
{
"post" : ObjectId("59301c39028afaf3450e2889"),
"title" :"test2"
},
{
"post" : ObjectId("59301c39028afaf3450e2885"),
"title" :"test1"
},
我们可以使用$lookup连接两个集合
db.sample.aggregate([
{
$lookup:
{
from: "posts",
localField: "posts.post",
foreignField: "_id",
as: "samplepost"
}
}
])
您可以测试它
db.sample.aggregate([
{$unwind: "$posts"},
{
$lookup: {
from: "posts",
localField: "posts.post",
foreignField: "_id",
as: "post"
}
},
{
$group: {
_id: "$_id",
name: {$first: "$name"},
posts: {
$push: {
post: {$arrayElemAt: ["$post._id", 0]},
title: {$arrayElemAt: ["$post.title", 0]}
}
}
}
}
])
. 就在你的问题标题的谷歌搜索结果顶部附近。在我的列表中排名第五,前三名是本网站先前的答案,第四名是关于一般主题的MongoDB文档,它还引用了
$lookup
。输入此帖子的时间少于。我使用了您的代码片段,但输出中缺少标题:“Test1”和标题:“Test2”字段。samplepost为空??