在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为空??