0
我正在尝试创建一个用户可以观看项目的监视列表。我试图通过将监视列表字段添加到我的用户集合来创建它。监视列表将是与其他项目对应的ID数组。如何检查数组中的每个项目是否存在
用户收集:
- ID:对象ID
- 名:字符串
- 监视列表:阵列即[9872,342,4545,234,8745]
我的问题与查询这个结构有关。我希望能够在传递用户ID和〜20个ID的数组的情况下编写查询,并检查用户观看哪些ID(即哪些ID存在于该用户的监视列表字段中)。
我最初尝试这样的:
db.users.find({
_id: 507c35dd8fada716c89d0013,
watchlist: { $in: [342, 999, 8745, etc...] }
});
但是这给了我任何包含这些监视列表项目,这是不是我想要的用户列表。我真正想要的是包含这样的一个阵列的响应:
{
id: 342,
exists: true
},
{
id: 999,
exists: false
},
{
id: 8745,
exists: true
}
我想甚至可以确定刚开匹配项目的数组:
{
_id: 507c35dd8fada716c89d0013,
watching: [342, 8745]
}
这是可行的,否则我会最好将监视列表移动到一个单独的集合中,并将用户作为一个数组来移动(我对后一种方法的关注是用户只能看几百个项目,但成千上万的用户可能会看到相同的项目。)
尝试颠倒它。尝试在每个监视列表上存储用户标识列表,并查询监视列表是否存在给定的用户标识 –