我怎么能创build我的mongodb查询基于node.js用户的input?

目前在我的应用程序我存储不同的论坛post。 用户可以添加新消息并创build新post。 其他用户在显示内容的同时可以对其进行过滤,以免他们看到之前阻止的特定用户上传的内容。

每个用户都被表示为device_iddisplay_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 } });