他们以任何方式搜索mongodb中的一个集合中的列,其中包含一个用于搜索的元素数组以及列中这些元素的caseInsensitive匹配吗?
答案 0 :(得分:9)
你可以使用$ elemMatch与正则表达式搜索,例如让我们在以下集合中搜索“ blue ”颜色:
db.items.save( { name : 'a toy', colors : ['red', 'BLUE'] })
> ok
db.items.find( { 'colors' :
{ $elemMatch :
{ $regex : 'blue', $options : 'i' }
}
})
>[
{ "name" : "someitem", "_id" : { "$oid" : "4fbb7809cc93742e0d073aef" }, "colors" : [ "red", "BLUE" ] }
]
答案 1 :(得分:8)
使用匹配不区分大小写的$in:
数据示例:
{
name : "...Event A",
fieldX : "aAa"
},
{
name : "...Event B",
fieldX : "Bab"
},
{
name : "...Event C",
fieldX : "ccC"
},
{
name : "...Event D",
fieldX : "dDd"
}
我们希望文件“fieldX”包含在数组的任何值(optValues)中:
var optValues = ['aaa', 'bbb', 'ccc', 'ddd'];
var optRegexp = [];
optValues.forEach(function(opt){
optRegexp.push( new RegExp(opt, "i") );
});
db.collection.find( { fieldX: { $in: optRegexp } } );
这适用于$all。
我希望这有帮助!
p.s。:这是我在Web应用程序中按标签搜索的解决方案。
答案 2 :(得分:1)
这完全适合我: 从代码中我们可以创建这样的自定义查询:
{"first_name":{"$in":[{"$regex":"^serina$","$options":"i"},{"$regex":"^andreW$","$options":"i"}]}}
这将在查询后转换为mongo中的以下内容:
db.mycollection.find({"first_name":{"$in":[/^serina$/i, /^andreW$/i]}})
同样适用于" $ nin"。
答案 3 :(得分:0)
这是我的不区分大小写的搜索(查询),其中包含来自数组数据的多个条件(正则表达式),我使用了$in
但它并不支持大小写不敏感的搜索。
示例数据
{
name : "...Event A",
tags : ["tag1", "tag2", "tag3", "tag4]
},
{
name : "...Event B",
tags : ["tag3", "tag2"]
},
{
name : "...Event C",
tags : ["tag1", "tag4"]
},
{
name : "...Event D",
tags : ["tag2", "tag4"]
}
我的查询
db.event.find(
{ $or: //use $and or $or depends on your needs
[
{ tags : {
$elemMatch : { $regex : '^tag1$', $options : 'i' }
}
},
{ tags : {
$elemMatch : { $regex : '^tag3$', $options : 'i' }
}
}
]
})
答案 4 :(得分:0)
这很简单
const sampleData = [
RegExp("^" + 'girl' + "$", 'i'),
RegExp("^" + 'boy' + "$", 'i')
];
const filerObj = { gender : {$in : sampleData}};
答案 5 :(得分:0)
用Java实现的方式是:
List<String> nameList = Arrays.asList(name.split(PATTERN));
List<Pattern> regexList = new ArrayList<>();
for(String name: nameList) {
regexList.add(Pattern.compile(name , Pattern.CASE_INSENSITIVE));
}
criteria.where("Reference_Path").in(regexList);