MongoDB:整合数组

时间:2011-11-20 15:36:29

标签: mongodb

我有一个大约1.1M文档的集合。集合中有相当多的重复,我最终将通过mapreduce消除。无论其...

以下是冗余数据的示例:

{
    "_id": ObjectId("4ec6d3ac61910ad451f1eb7a"),
    "bii": 10.8105,
    "class": 2706,
    "decdeg": -48.8432,
    "lii": 286.488,
    "name": "HD 97312",
    "radeg": 167.8669,
    "vmag": 8.2,
    "xref": ["HD 97312"]
}

{
    "_id": ObjectId("4ec6d44c61910ad451f8b255"),
    "bii": 10.802,
    "class": 2900,
    "decdeg": -48.8517,
    "decpm": -0.008,
    "lii": 286.4896,
    "name": "PPM 316146",
    "radeg": 167.8644,
    "rapm": -0.0003,
    "vmag": 8.2,
    "xref": ["CPD -48 3792", "-48 6250", "HD 97312", "PPM 316146", "SAO 222629"]
}

{
    "_id": ObjectId("4ec6d48c61910ad451ff1ead"),
    "bii": 10.802,
    "class": 2700,
    "decdeg": -48.8517,
    "decpm": -0.013,
    "hd_component": 0,
    "lii": 286.4897,
    "name": "SAO 222629",
    "radeg": 167.8647,
    "rapm": -0.0006,
    "vmag": 8.3,
    "xref": ["CP-48 3792", "HD 97312", "SAO 222629"]
}

由于外部参照数组包含所有交叉引用,因此我需要将这些数组合并为一个数组,并删除重复项。

任何人都可以提出一种“简单”的方法来做这个,所以我不必编写某种递归的js函数吗?

1 个答案:

答案 0 :(得分:1)

我不是100%清楚你需要什么。我在这里看到两种可能性。

如果您正在进行Map / Reduce,那么您只需要在“减少”时确保重复。应该像M / R中的几个for循环一样简单。

如果您是从头开始构建这些数据,那么您应该查看$addToSet更新功能,它将为您提供所需的内容。