不区分大小写的 Mongo $in 查询

ben*_*e89 3 mongoose mongodb

我正在使用 Mongoose.js 执行 $in 查询,如下所示:

userModel.find({
            'twitter_username': {
                $in: friends
            }
        })
Run Code Online (Sandbox Code Playgroud)

friends只是一个字符串数组。但是,我遇到了一些大小写问题,想知道是否可以使用 Mongo 的 $regex 功能使 $in 查询不区分大小写?

Bat*_*eam 7

文档

要在 $in 查询表达式中包含正则表达式,您只能使用 JavaScript 正则表达式对象(即 /pattern/ )。例如:

{ name: { $in: [ /^acme/i, /^ack/ ] } }

一种方法是为每个匹配创建正则表达式并形成朋友数组。

 var friends = [/^name1$/i,/^name2$/i];
 or,
 var friends = [/^(name1|name2)$/i]
 userModel.find({"twitter_username":{$in:friends }})
Run Code Online (Sandbox Code Playgroud)


Dis*_*ser 5

做这样的事情有点棘手

首先,您应该friends使用以下命令转换为新的正则表达式数组列表:

var insesitiveFriends = [];

friends.forEach(function(item)
{
    var re = new RegExp(item, "i");
    insesitiveFriends.push(re);    
})
Run Code Online (Sandbox Code Playgroud)

然后运行查询

db.test.find(
{
   'twitter_username':
    {
        $in: insesitiveFriends
    }
})
Run Code Online (Sandbox Code Playgroud)

我在测试集中有示例文档

/* 0 */
{
    "_id" : ObjectId("5485e2111bb8a63952bc933d"),
    "twitter_username" : "David"
}

/* 1 */
{
    "_id" : ObjectId("5485e2111bb8a63952bc933e"),
    "twitter_username" : "david"
}
Run Code Online (Sandbox Code Playgroud)

通过 varfriends = ['DAvid','bob'];我得到了两个文件