2016-12-08 1 views
0

Я работаю с MongoDB 3.0 (мы не будем обновлять до следующего года.) У меня есть требование получить список уникальных значений для нескольких полей в коллекции. Поля имеют то же значение большую часть времени. Это может быть достигнуто в версии 3.2 что-то вроде этого:

db.mydata.aggregate([ 
    {'$project': {'combined_users': ['$user1', '$user2']}}, 
    {'$unwind': '$combined_users'}, 
    {'$group': {_id: 1, {$addToSet: '$combined_users'}}} 

Проблема заключается в версии 3.0 мы получаем «Disallowed тип поля массива в ...» в combined_data.

Как сделать то же самое в Mongo 3.0?

+0

В 3.2 мы не делаем это как то – styvane

+0

Возможный дубликат [Объединить два поля массива в MongoDB] (http://stackoverflow.com/questions/ 21545103/merge-two-array-field-in-mongodb) – styvane

ответ

0

Вы должны использовать оператор $setUnion

db.mydata.aggregate([ 
    {'$project': { 'combined_users': { "$setUnion": ['$user1', '$user2'] }}} 
]) 
+0

Я признаю, что мне не было известно о $ setUnion. Спасибо вам за это. Мои поля 'user1' и' user2' не являются массивами, поэтому сначала я сделал группу. – Barc

+0

Финал: db.mydata.aggregate ([ {$ group: {_id: 1, user1: {$ addToSet: "$ user1"}, user2: {$ addToSet: "$ user2"}}, {'$ project ': {' combined_users ': {$ setUnion: [' $ user1 ',' $ user2 ']}}} ]) – Barc