【问题标题】:Check if values matchs in MongoDB [duplicate]检查MongoDB中的值是否匹配[重复]
【发布时间】:2016-02-14 06:17:54
【问题描述】:

我想检查mongodb 是否nicknamepasswordtrue 我正在尝试将$and 运算符与$regex 一起使用,但我无法让它工作。目前有人可以帮我解决这个问题吗?

checkNickname: function(nickname, password){
    var reNick = new RegExp(nickname, "i"),
        rePass = new RegExp(password, "i");
    getProfile.find( { $and :  [{
        nickname: { $ne: { $regex: reNick } } },
        { password: { $ne: { $regex: rePass} } } 
    ]}, function(data){
        console.log(data)
    });
},

【问题讨论】:

    标签: regex mongodb mongodb-query


    【解决方案1】:

    如前所述,您不能将 $regex 作为 $ne 的参数,但您可以 negate your regex.

    checkNickname: function(nickname, password){
        var reNick = RegExp("^((?!"+nickname+").)*$", "i");
        var rePass = new RegExp("^((?!"+password+").)*$", "i");
        getProfile.find( { nickname: reNick, password: rePass }, function(err, data) {
            console.log(data)
        });
    };
    

    【讨论】:

    • find 函数有两个参数,第一个总是 err 所以它必须是function(err, data) { if(err) throw err; console.log(data) });
    • data 作为第二个参数,我现在得到一个数组,但它是空的,我认为这意味着找不到匹配项。
    • 是的,就是这个意思
    【解决方案2】:

    这会帮你搞定的,

        checkNickname: function(nickname, password){
            var reNick = new RegExp("/^" + nickname + ".*/", "i"),
                rePass = new RegExp("/^" + password + ".*/", "i");
            getProfile.find({ 
                        nickname: { $not: reNick },  
                        password: { $not: rePass }
                }, function(err, data) {
                console.log(data)
            });
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2018-04-03
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多