MongoDB: Найти одну и ту же запись для двух разных пользователей? - PullRequest
0 голосов
/ 12 мая 2018

У меня есть коллекция, где я храню дружбу между пользователями. Например:

user_1 -> user_4
user_1 -> user_8
user_1 -> user_23

и т. Д.

В этой коллекции только эти два поля и стандартное поле _id для записи.

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

Например:

user_1 записей в коллекции:

user_1 -> user_4
user_1 -> user_8
user_1 -> user_23

user_2 записей в коллекции:

user_2 -> user_4
user_2 -> user_323
user_2 -> user_23

Когда я знаю, что сравниваются записи user_1 и user_2, запрос должен вернуть мне 2 записи (записи, которые одинаковы для обоих пользователей):

user_4
user_23

Итак, я знаю, что у user_1 и user_2 есть 2 общих друга (user_4 и user_23)

UPDATE:

Это текущая структура коллекции:

{ "_id" : ObjectId("5aacd8f60d16f81bfb2ec729"), "username" : "bellamissy95", "belongs_to_user" : ObjectId("5aacd8500d16f81bd56f0e90")}
{ "_id" : ObjectId("5aacd8f60d16f81bfb2ec72a"), "username" : "salome350", "belongs_to_user" : ObjectId("5aacd8500d16f81bd56f0e90")}
{ "_id" : ObjectId("5aacd8f60d16f81bfb2ec72b"), "username" : "jacky_25.11.17_", "belongs_to_user" : ObjectId("5aacd8500d16f81bd56f0e90")}
{ "_id" : ObjectId("5aacd8f60d16f81bfb2ec72c"), "username" : "jxsmin.mke", "belongs_to_user" : ObjectId("5aacd8500d16f81bd56f0e90")}
{ "_id" : ObjectId("5aacd8f60d16f81bfb2ec72d"), "username" : "toni_w2005", "belongs_to_user" : ObjectId("5aacd8500d16f81bd56f0e90")}

Legend:
"_id": the id of the entry
"username": name of the friend
"belongs_to_user": _id of the user entry

Кто-нибудь знает, как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 12 мая 2018

Предполагая, что коллекция, имеющая данные, называется "дружба" и определяется как

{ "_id" : <some unique number> , "user":"user_1","friend":"user_4"}

. Следующий Javascript может использоваться для получения общих друзей среди любых двух пользователей.

var friendlist = [];
db.friendship.find({"user":{$in:['user_1','user_2']}},{"friend":1,"_id":0}).forEach(function(d) { if (friendlist.includes(d.friend) ) {print(d.friend)} ;friendlist.push(d.friend); }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...