MongoDB: консолидация массивов - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть коллекция с около 1,1 млн документов. В коллекции достаточно много дубликатов, которые я в конечном итоге устраню с помощью 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"]
}

Поскольку массив xref содержит все перекрестные ссылки, мне как-то нужно объединить эти массивы в один, удалив дубликаты.

Кто-нибудь может предложить «простой» способ сделать это, чтобы мне не пришлось писать какую-то рекурсивную функцию js?

1 Ответ

1 голос
/ 21 ноября 2011

Я не на 100% понимаю, что вам нужно здесь.Я вижу здесь две возможности.

Если вы делаете Map / Reduce, то вам просто необходимо обеспечить дублирование при «сокращении».Должно быть так же просто, как пара for циклов в M / R.

Если вы строите эти данные с нуля, то вам стоит взглянуть на функцию обновления $addToSet, которая дастВы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...