【问题标题】:MongoDB: Finding same entry for two different users?MongoDB:为两个不同的用户找到相同的条目?
【发布时间】:2018-05-14 14:42:45
【问题描述】:

我有一个收藏,用于存储用户之间的友谊。例如:

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)

更新:

这是当前的集合结构:

{ "_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

有人知道怎么做吗?

谢谢!

【问题讨论】:

  • 不是很清楚,因为实际显示文档在您真正存储的地方是如何表示的会非常有益。总是有“一种方法”,但你的“真实”文档是什么样的,这对实际解决方案很重要。我建议你实际展示这一点,而不是一些不能准确描述你真正拥有的抽象版本。至少从任何查看问题的人的角度来看。
  • @NeilLunn 我更新了帖子并插入了当前的集合结构。希望对您有所帮助。
  • 那么这些数据有什么关系呢?每个条目都是一个“独特”的朋友不是吗?是不是要显示共享相同朋友的用户?显示一些支持这一点的数据,因为到目前为止没有用户与任何其他用户共享相同的“朋友”。
  • 是的,这是两个用户之间的典型朋友关系。因此,当我的系统存储人与人之间的所有关系时,我想知道用户 A 和用户 B(相比之下)有多少共同的朋友。就是这样。

标签: mongodb mongodb-query


【解决方案1】:

假设包含数据的集合被命名为“friendship”并定义为

{ "_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); }); 

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多