在MongoDB中合并两个集合

我一直在尝试在MongoDB中使用MapReduce来做我认为简单的过程。我不知道这是否是正确的方法,甚至不应该使用MapReduce。我用谷歌搜索了我想到的关键词,并试图在文档中找到我认为最成功的文档,但是没有结果。也许我在想这个吗?


我有两个收藏夹:details和gpas


details由一堆文件(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还是您将其命名为其他名称?


MMTTMM
浏览 1323回答 2
2回答

qq_花开花谢_0

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

相关分类

MongoDB