【问题标题】:How to combine AND with OR in mongoose?如何在猫鼬中将 AND 与 OR 结合使用?
【发布时间】:2017-02-24 12:10:37
【问题描述】:

我意识到在 node.js 中我构建了一个查询,例如:

if (hashtagsInput != undefined) {
    var hashtags = hashtagsInput.split(",");
    for(var i=0; i<hashtags.length; i++) {
        query = query.or([{ 'hashtags': hashtags[i] }]);
    }
}

if (friends != undefined) {
    var friendsSplitted = friends.split(",");
    for(var i=0; i<friendsSplitted.length; i++) {
        query = query.or([{ 'facebook_username': friendsSplitted[i] }]);
    }
}

那么查询是:

..., '$or': [ { hashtags: 'test1' }, { hashtags: 'test2' }, {
     facebook_username: 'XXXXXXXXXXXX' }, { facebook_username: 'YYYYYYYYYYYYYYY' },
     { facebook_username: 'ZZZZZZZZZZZZ' }],...

这将找到具有标签test1 或test2 或具有fb_username XXXXXX 或YYYYYYY 或ZZZZZZZ 的所有记录。

但是我如何在node.js 代码中编写查询,以便当用户放置主题标签时,查询会获取具有test1 或test2 AND fb_username XXXXXX 或YYYYYYY 或ZZZZZZZ 的条目?

如果用户不提供任何主题标签,那么它只能获取 fb_accounts,反之亦然 - 如果用户不提供 fb,那么它只关注主题标签。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    我想当两者都提供时,您想在哈希和用户名之间放置 AND 运算符,而当提供其中之一时,您只想使用它们进行搜索。

    var query = {};
    query.$and = [];
    
    if (hashtagsInput != undefined) {
        var hashtags = hashtagsInput.split(",");
        query.$and.push({"hashtags":{$in: hashtags}});
    }
    
    if (friends != undefined) {
        var friendsSplitted = friends.split(",");
        query.$and.push({"facebook_username":{$in: friendsSplitted}});
    }
    

    你可以使用$in操作符来应用Or条件,因为你可以直接传递数组,你不需要应用for循环。

    当用户同时放置主题标签和用户名时,查询会获取具有(test1 或 test2)AND(fb_username XXXXXX 或 YYYYYYY 或 ZZZZZZZ)的条目

    【讨论】:

    • 在我的应用程序中的特定情况下工作,所以我会接受它作为答案,谢谢!但是,在向我的应用程序添加更多功能后 - 它导致了一个稍微不同的问题,我想在这里为它创建一个单独的问题stackoverflow.com/questions/40058073/…
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    相关资源
    最近更新 更多