为了账号安全,请及时绑定邮箱和手机立即绑定

在MongoDB中合并两个集合

在MongoDB中合并两个集合

MMTTMM 2019-12-26 11:03:44
我一直在尝试在MongoDB中使用MapReduce来做我认为简单的过程。我不知道这是否是正确的方法,甚至不应该使用MapReduce。我用谷歌搜索了我想到的关键词,并试图在文档中找到我认为最成功的文档,但是没有结果。也许我在想这个吗?我有两个收藏夹:details和gpasdetails由一堆文件(3+百万个)组成。所述studentid元件可以被重复两次,每个year,如下所示:{ "_id" : ObjectId("4d49b7yah5b6d8372v640100"), "classes" : [1,17,19,21], "studentid" : "12345a", "year" : 1}{ "_id" : ObjectId("4d76b7oij7s2d8372v640100"), "classes" : [2,12,19,22], "studentid" : "98765a", "year" : 1}{ "_id" : ObjectId("4d49b7oij7s2d8372v640100"), "classes" : [32,91,101,217], "studentid" : "12345a", "year" : 2}{ "_id" : ObjectId("4d76b7rty7s2d8372v640100"), "classes" : [1,11,18,22], "studentid" : "24680a", "year" : 1}{ "_id" : ObjectId("4d49b7oij7s2d8856v640100"), "classes" : [32,99,110,215], "studentid" : "98765a", "year" : 2}...gpas具有与相同studentid的元素details。每个仅一个条目studentid,如下所示:{ "_id" : ObjectId("4d49b7yah5b6d8372v640111"), "studentid" : "12345a", "overall" : 97, "subscore": 1}{ "_id" : ObjectId("4f76b7oij7s2d8372v640213"), "studentid" : "98765a", "overall" : 85, "subscore": 5}{ "_id" : ObjectId("4j49b7oij7s2d8372v640871"), "studentid" : "24680a", "overall" : 76, "subscore": 2}...但是,当我运行它时,这是我得到的集合:{ "_id" : "12345a", "value" : { "studentid" : "12345a", "classes_1" : [ ], "classes_2" : [ ], "overall" : 97, "subscore" : 1 } }{ "_id" : "98765a", "value" : { "studentid" : "98765a", "classes_1" : [ ], "classes_2" : [ ], "overall" : 85, "subscore" : 5 } }{ "_id" : "24680a", "value" : { "studentid" : "24680a", "classes_1" : [ ], "classes_2" : [ ], "overall" : 76, "subscore" : 2 } }我想念的类数组。另外,顺便说一句,如何访问生成的MapReduce value元素中的元素?MapReduce总是输出到value还是您将其命名为其他名称?
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

您不能为此使用m / r,因为它仅设计用于一个集合。从多个集合中读取将破坏分片兼容性,因此不允许这样做。您可以使用新的聚合框架(2.1+)或在应用程序内部执行所需的操作。


查看完整回答
反对 回复 2019-12-26
  • 2 回答
  • 0 关注
  • 1320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信