reactivemongo — объединение двух BSONDocuments

Я ищу самый эффективный и простой способ объединить два документа BSON. В случае коллизий у меня уже есть обработчики, например, если оба документа включают Integer, я суммирую это, если также строка, если массив, то будут добавлены элементы другого и т. д.

Однако из-за неизменяемости BSONDocument с ним почти невозможно что-то сделать. Какой самый простой и быстрый способ сделать слияние?

Мне нужно объединить следующее, например:

{
  "2013": {
   "09": {
    value: 23
   }
  }
}

{
  "2013": {
   "09": {
    value: 13
   },
   "08": {
    value: 1
   }
  }
}

И окончательный документ будет:

{
  "2013": {
   "09": {
    value: 36
   },
   "08": {
    value: 1
   }
  }
}

В BSONDocument.add есть метод, однако он не проверяет уникальность, это означает, что у меня будет в конце 2 документа BSON с «2013» в качестве корневого ключа и т. д.

Благодарю вас!


person Alex K    schedule 16.09.2013    source источник


Ответы (1)


Насколько я понимаю, ваш запрос, вы хотите агрегировать данные поля с помощью составного идентификатора. MongoDB имеет довольно удобную совокупную структуру. Частью этой структуры является ключевое слово агрегата конвейера $group. Это позволит вам указать и _id для группы, по которой можно определить как поле или документ, как в вашем примере, а также выполнить агрегацию с использованием аккумуляторов, таких как $sum.

Вот ссылка на руководство для операторов, которые вам, вероятно, понадобятся. http://docs.mongodb.org/manual/reference/operator/aggregation/group/

Кроме того, удалите тег «объединить» из исходного запроса, чтобы избежать путаницы. Многие драйверы MongoDB включают функцию слияния как часть представления BsonDocument как способ объединения двух BsonDocument в один BsonDocument линейно или посредством перезаписи элементов, и это не имеет отношения к агрегации.

Надеюсь это поможет.

ндх

person Biixo.com Data Architect    schedule 16.01.2014