2014-02-04 4 views
2

У меня есть коллекция следующей структурыОбъединить два поля массива в MongoDB

{ 
    _id : ObjectId("52f0795a58c5061aa34d436a"), 
    "attribute1" : [1, 3, 6, 7], 
    "attribute2" : [2, 4, 6, 8] 
} 

Есть ли способ, что я могу объединить два атрибут при удалении дубликатов с использованием агрегирования запроса в MongoDB? Мне нужен результат, чтобы быть как это:

{ 
    _id : ObjectId("52f0795a58c5061aa34d436a"), 
    "attribute3" : [1, 3, 6, 7, 2, 4, 8] 
} 
+0

Что дублируют здесь? – heinob

+0

@heinob 6 здесь дубликат –

ответ

4

Если вы хотите изменить данные, которые вы можете использовать $addToSet с модификатором $each как только вы прочитали содержимое одного из массивов. Это будут отдельные обновления, поскольку вы не можете ссылаться на другой элемент документа в операции update.

Если вы действительно хотите это для агрегации и можете подождать, то предстоящий выпуск MongoDB добавит новый set operators к агрегации. В частности, есть $setUnion, который будет делать именно то, что вы хотите.

+0

$ setUnion - Это именно то, что я ищу. Спасибо за информацию. Мне действительно нужно это сделать, используя структуру агрегации. Я жду следующего релиза :( –

+0

Есть ли какая-нибудь работа для этого в текущей версии с использованием структуры агрегации? –

4

Использование метода .aggregate() и оператора $setUnion.

db.collection.aggregate([ 
    { "$project": { 
     "attribute3": { "$setUnion": [ "$attribute1", "$attribute2" ] } 
    }} 
]) 

Что дает:

{ 
    "_id" : ObjectId("52f0795a58c5061aa34d436a"), 
    "attribute3" : [8, 4, 2, 6, 3, 7, 1] 
} 
Смежные вопросы