Разница между сохраненным массивом и новым массивом в mongodb - PullRequest
0 голосов
/ 06 мая 2011

Я новичок в mongodb.

У меня есть следующие данные, хранящиеся в mongodb

    { "_id" : ObjectId("4"), "uid" : "1", "friendsIds" : [ "2", "3" ] }

Дело 1: Теперь у меня есть новый набор friendsIds ["2","3","4"]

Я хочу сравнить оба набора и получить значение, которое не хранится в базе данных. В этом случае я хочу получить 4

Дело 2: Теперь у меня есть новый набор friendsIds ["3","4"]

Я хочу сравнить оба набора и получить значение, которое хранится в базе данных, но не в новом наборе. В этом случае я хочу получить 2

Можно ли Case 2 выполнить с помощью mapReduce?

Как добиться обоих случаев в mongodb?

Ответы [ 3 ]

1 голос
/ 07 мая 2011

Для случая 1, похоже, вам нужно [$addToSet][1]. Взгляните на пример $each.

Для случая 2 такая функция на стороне сервера отсутствует. Просто верните документ и сравните на стороне клиента.

Какое действие вы делаете, что вы просто хотите 2, а не все остальное?

0 голосов
/ 12 апреля 2014

Это можно сделать в структуре агрегирования, используя операторы множеств :

> db.foo.insert({"friendsIds" : [ "2", "3"]})
WriteResult({ "nInserted" : 1 })

> db.foo.aggregate([ {$project: {diff: {$setDifference: [["2","3","4"], '$friendsIds']}}} ])
{ "_id" : ObjectId("53490a53a0e3abbe0dd0c21c"), "diff" : [ "4" ] }

> db.foo.aggregate([ {$project: {diff: {$setDifference: ['$friendsIds', ["3","4"]]}}} ])
{ "_id" : ObjectId("53490a53a0e3abbe0dd0c21c"), "diff" : [ "2" ] }
0 голосов
/ 06 мая 2011

если у вас есть два массива

a = [ "2", "3" ]
b = ["2","3","4"]

в рубине:

a-b = ["4"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...