簡體   English   中英

如何根據node.js中用戶的輸入創建我的mongodb查詢?

[英]how can I create my mongodb query based on the input from the user in node.js?

目前在我的應用程序中我存儲不同的論壇帖子 用戶可以添加新消息並創建新帖子。 其他用戶 - 在顯示內容時 - 可以對其進行過濾,以便他們不會看到之前阻止的特定用戶上傳的內容。

每個用戶都表示為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排除他的帖子。 在那種情況下,當有一些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 } });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM