Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将2个已加入的集合插入新集合MongoDB_Javascript_Mongodb_Aggregate Functions - Fatal编程技术网

使用javascript将2个已加入的集合插入新集合MongoDB

使用javascript将2个已加入的集合插入新集合MongoDB,javascript,mongodb,aggregate-functions,Javascript,Mongodb,Aggregate Functions,在将结果插入新集合时,我正在尝试将两个集合连接到新集合 我用于联接的代码: db.users.aggregate( [{ $lookup: { from: "posts", localField: "_id", foreignField: "_uid", as: "postsByUser" } }]) 我知道这会返回一个新的集合/数组 现在,我可以将此新数组插入新集合,如下所示: db.postsByUsers.inser

在将结果插入新集合时,我正在尝试将两个集合连接到新集合

我用于联接的代码:

db.users.aggregate(
  [{
    $lookup: {
      from: "posts",
      localField: "_id",
      foreignField: "_uid",
      as: "postsByUser"
    }
  }])
我知道这会返回一个新的集合/数组 现在,我可以将此新数组插入新集合,如下所示:

db.postsByUsers.insert(db.users.aggregate(
  [{
    $lookup: {
      from: "posts",
      localField: "_id",
      foreignField: "_uid",
      as: "postsByUser"
    }
  }]))
但结果是,我在收集“postsByUsers”不是我所期望的。 我得到了很多额外的字段,比如:\u useReadCommands、\u cursorid、\u batchSize等。 我确实在名为_batch的字段中获得了所需的信息,但它没有我预期的那么干净,我希望它看起来像一个数组,里面有对象+结尾的postsByUser字段,它将提供所有信息。当我尝试设置一个
var
usersPosts与我所做的连接编码相等,并在其中循环,并针对每个文档进行测试时:
db.postsByUsers.insert(usersPosts)
,但似乎什么也做不了:

usersPosts.forEach(function(doc){
  db.postsByUsers.insertOne(doc)
})
奇怪的是,我确实设法得到了我想要的结果,但我不知道为什么(奇怪),我试图通过按cmd B上的向上键来查看我编写的代码,但似乎没有什么能给我相同的结果…请帮助并感谢您阅读

您可以使用聚合管道阶段将聚合管道的结果输出到另一个集合中

{ $out: 'postsByUsers' }

从MongoDB 4.2开始,您还可以使用,它更灵活,可以将结果文档与现有文档合并。

您可以共享模式、当前输出(json格式)和预期输出吗?如果您希望获得更好的透视图,我可以发送一个包含所有信息的文件,因为这是很多信息:)您不需要发送整个文件,只需要发送相关的最小部分。我们想知道
用户
帖子
的结构。我在下面发布了一个答案,如果答案仍然不能解决您的问题,请添加一条评论:)谢谢您的回复!您能否更具体地说明我应该在db.users.aggregate([{$lookup:{from:“posts”,localField:“\u id”,foreignField:“\u uid”,as:“postsByUser”}}])中的{$out:'postsByUser'}放在哪里?请查阅我参考的文档。它应该放在聚合的最后一个阶段,那就是
.aggregate([{$lookup:{…},{$out:…}])
天哪,它确实起作用了,非常感谢您的大力帮助,我在这方面花了太多时间!希望你有一个美好的白天/夜晚!