我有一个实体集合,它代表一棵树。每个实体都有一个包含属性数组的属性。MongoDB中的“父链接”树上的MapReduce
例如:
{
"_id" : 1,
"parent_id" : null,
"attributes" : [ "A", "B", "C" ]
}
我想用MapReduce的生成另一个集合这类似于原来的集合,但集合中的每个项目,它不仅包含直接与实体相关的属性,还有它的祖先,一直到hiearchy的根源。
因此,考虑下列实体:
{
"_id" : 1,
"parent_id" : null,
"attributes" : [ "A", "B", "C" ]
}
{
"_id" : 2,
"parent_id" : 1,
"attributes" : [ "D", "E", "F" ]
}
{
"_id" : 3,
"parent_id" : 2,
"attributes" : [ "G", "H", "I" ]
}
的MapReduce工作的结果将是以下几点:
{
"_id" : 1,
"attributes" : [ "A", "B", "C" ]
}
{
"_id" : 2,
"attributes" : [ "A", "B", "C", "D", "E", "F" ]
}
{
"_id" : 3,
"attributes" : [ "A", "B", "C", "D", "E", "F", "G", "H", "I" ]
}
我已经成功生产MapReduce作业里面做简单的事情,像数的属性对于每个实体,但无法让我的头脑如何处理层次结构。我愿意选择存储数据的其他方式,但不希望将整个层次结构存储在单个文档中。
在MongoDB中使用MapReduce可能会出现这种情况吗?或者我只是以错误的方式思考问题?
是可以将数据在您的应用程序相结合? Map Reduce依赖于单线程的Javascript。这里是关于树的模式设计的MongoDB文档:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB – Jenna 2012-07-06 21:54:28
这是可能的,但它很难保持实体同步,因为可能会有相当多的深层次。 – tjrobinson 2012-07-08 05:58:34