【发布时间】:2017-04-25 13:33:11
【问题描述】:
目前在我的应用程序中,我存储了不同的论坛帖子。用户可以添加新消息并创建新帖子。 其他用户 - 在显示内容时 - 可以对其进行过滤,这样他们就不会看到他们之前阻止的特定用户上传的内容。
每个用户都表示为device_id 和display_name 的组合。
当用户获取内容时,他们会执行 post 查询并包含一组先前被阻止的用户:
"blockedUsers": (
{
"device_id" = "XXX";
"display_name" = XXX;
},
{
"device_id" = "YYY";
"display_name" = YYY;
}
)
目前有可能使用一些注册的 display_name 或匿名添加内容。
现在我只支持过滤带有一些 display_name 的用户:
if(blockedUsers) {
var excludedUsernames = [];
for(var i in blockedUsers) {
excludedUsernames.push(blockedUsers[i]['display_name']);
}
query.$and.push({ 'display_name': { $nin: excludedUsernames } });
}
这很好 - 当用户注册并有一些 display_name(与 anonymous 不同)时 - 我不关心他的 device_id,我只关心通过他的 display_name 阻止他。
但是,当一些匿名用户之前被屏蔽时:
"blockedUsers": (
{
"device_id" = "XXX";
"display_name" = "anonymous"; //represents anonymous user
},
{
"device_id" = "YYY";
"display_name" = "anonymous"; //represents anonymous user
}
)
我需要通过device_id 和 display_name == anonymous 排除他的帖子。在那种情况下,当有一些 device_id 但包含 display_name != anonymous - 我不想阻止它。
我不知道如何更新我的查询以使其满足上述要求,您能帮我解决这个问题吗?谢谢!
【问题讨论】:
-
我认为您的帖子在您第一次发布时没有得到答复,因为您很难理解您的要求。为了澄清起见,使用伪代码,我是否更正了您要解决的查询是:!((displayName IN arrayOfBlockedNames)OR(displayName == 'anonymous' AND device_id IN arrayOfBlockedDevices))。我说的对吗?
-
保罗,是的,你是对的
标签: javascript node.js mongodb mongodb-query