在MongoDB中汇总异构文档

时间:2015-06-19 18:48:58

标签: mongodb mapreduce aggregation-framework

我正在编写一个工具来检查MongoDB会话存储,其中结构是包含变量的名称空间,包含变量的信息,粗略地说:

{
    "some namespace" : {
        "some variable" : {
            "t" : "serialization type",
            "b" : "data value",
            "c" : "java class type"
        },
        "some other variable in this namespace" : {
            "t" : "serialization type",
            "b" : "data value",
            "c" : "java class type"
        },
        ...
    },
    ... // more namespaces
}

名称空间和变量的名称都不同。我写了一个map-reduce作业来遍历命名空间并循环遍历每个命名空间中的变量,并为每个命名空间中的每个变量发出。

但是,我想尝试切换到Mongo的聚合框架以避免潜在的写锁定问题。根据文档,似乎我必须将变量的名称指定为$ group on,这似乎与我的异构数据不兼容。有没有办法让迭代参与聚合调用?

1 个答案:

答案 0 :(得分:1)

目前,要使用聚合框架,您必须知道要写入查询的字段名称。有some proposals删除该限制。

现在,根据您的设计,要使用聚合框架,您可能需要定期合并使用map-reduce的数据,或多或少地类似:

{
    namespaces: [
      { name: "some namespace",
        variables: [
          { name: "some variable",
            t : "serialization type",
            b : "data value",
            c : "java class type"
          },
          { name: "some other variable in this namespace",
            t : "serialization type",
            b : "data value",
            c : "java class type"
          },
          ... // more variables
        ]
      },
      ... // more namespaces
    ]
}

现在使用聚合框架进行查询相对容易。承认你可能会处理陈旧的数据......