2013-09-16 5 views
0

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

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

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

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

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

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

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

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

Спасибо!

ответ

0

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

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

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

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

ndh

Смежные вопросы