У меня есть графические соединения в MongoDB:
{
from: ObjectID(user),
to: ObjectID(user)
}
если я хочу получить всех пользователей на глубине 1, это просто:
db.connections.find({from:ObjectID(myUser)});
Но когда я хочу найти всех пользователей на глубине 2, это сложно: глупая идея - «найти всех людей на глубине 1, а затем выполнить запрос, подобный предыдущему, для каждого человека. Ни в коем случае, плюс он вернет также все круговые запросы. пути.
e.g
1->2
2->1
1->3
2->4
results of user(1).findDepth2() would be 2,1,3,4 instead of 4.
Пример в псевдо node.js:
var myFriends = db.connections.find({from:ObjectID(myUser)});
var friendAtDepth2 = [];
for(friend in myFriends){
// I find friends of each friend
var frendsOfFriend = db.connections.find({from:ObjectID(friend)});
for(friendOfFriend in frendsOfFriend){
if(friendAtDepth2.indexof(friendOfFriend)==-1
&& myFriends.indexof(friendOfFriend)==-1
&& myUser!=friendOfFriend){
// I haven't already found this user, so I it is actually at depth 2
friendAtDepth2.push(friendOfFriend);
}
}
}
Но таким образом я действительно выполняю много запросов, и я надеюсь, что существует своего рода запрос на соединение, как в mysql helipng, я делаю это только в одном запросе
Возможен ли такой запрос?