【发布时间】:2016-04-30 23:46:30
【问题描述】:
我在 mongodb 中有这样的集合:
{
"_id" : ObjectId("56a5f47ed420cf0db5b70242"),
"tag" : "swift",
"values" : [
{
"word" : "osx",
"value" : 0.02
},
{
"word" : "compiler",
"value" : 0.01
}
]
},
{
"_id" : ObjectId("56a5f47ed420cf0db5b70243"),
"tag" : "c++",
"values" : [
{
"word" : "namespace",
"value" : 0.04
},
{
"word" : "compiler",
"value" : 0.05
}
]
}
我需要像这样在集合中转换它:
{
"_id" : ObjectId("56a5f4e5d420cf0db5b70247"),
"word" : "namespace",
"values" : [
{
"tag" : "c++",
"value" : 0.04
}
]
},
{
"_id" : ObjectId("56a5f4e5d420cf0db5b70248"),
"word" : "compiler",
"values" : [
{
"tag" : "swift",
"value" : 0.01
},
{
"tag" : "c++",
"value" : 0.05
}
]
},
{
"_id" : ObjectId("56a5f4e5d420cf0db5b70249"),
"word" : "osx",
"values" : [
{
"tag" : "swift",
"value" : 0.02
}
]
}
我是使用 mongodb 和 MapReduce 的新手,有一些问题:
- 在我的情况下,我应该使用 MapReduce 或 Aggregation 框架和 $out 到另一个集合吗?
- 哪种方法对内存更有效?因为集合很大 (3gb),而我只有 8gb 的 RAM,所以我担心会出现 OutOfMemory 错误。
- 如果我将使用 MapReduce,map 和 reduce 阶段应该是什么?我应该在地图阶段发出
{"word": word, "values": {"tag":tag, "value": value} }之类的项目并将其合并到reduce 状态?
【问题讨论】:
标签: mongodb mapreduce mongodb-query aggregation-framework