我怎么能创build我的mongodb查询基于node.js用户的input?
目前在我的应用程序我存储不同的论坛post。 用户可以添加新消息并创build新post。 其他用户在显示内容的同时可以对其进行过滤,以免他们看到之前阻止的特定用户上传的内容。
每个用户都被表示为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
排除他的post。 在那种情况下,当有一些device_id但包含display_name
!= anonymous
– 我不想阻止。
我不知道如何更新我的查询,以便覆盖上面的要求,你能帮我吗? 谢谢!
如果我理解得好:
- 如果用户有禁止的
device_id
,那么阻止他 - 如果用户有禁止的
display_name
,则阻止他
在这种情况下,他是否anonymous
并不重要。
let excludedUsernames, excludedDevices; blockedUsers.forEach((e) => { excludedUsernames.puhs({ e["display_name"] }); excludedDevices.push({ e["device_id"] }); }); query.$and.push({ 'display_name' : { $nin: excludedUsernames } }); query.$and.push({ 'device_id' : { $nin: excludedDevices } });
编辑
query.$or.push({ $and: [ { 'device_id' : { $nin: excludedDevices }}, { 'display_name' : "anonymous" } ] }); query.$or.push({ 'display_name' : { $nin: excludedUsernames } });