我正在寻找带有数据数组的标题中提到的查询。
我有这条线工作..
collection.find({"name": {"$in":[/papa JOhn's/i,"Taco Bell"]}}).toArray(function(err, items) {
但是,数据将是动态的,并作为数组提供给查询
restaurant_data = [rest1, rest2 .... restn]
我想基本上有像
这样的东西collection.find({"name": {"$in": /restaurant_data/i }}).toArray(function(err, items) {
let test_data = ['papa john', 'taco bell']
//Get an array of the restaurant names here
collection.find({"name": {"$in": test_data.map(element => {
/element/i
})}}).toArray(function(err, items) {
我得到了这样做......不确定它是否是最有效的
let test_data = ['papa john', 'taco bell']
collection.find({"name": {"$in": test_data.map((element) => {
var regex = new RegExp(".*" + element + ".*");
return regex
})}}).toArray(function(err, items) {
答案 0 :(得分:1)
collection.find({"name": {"$in":
restaurant_data.map(e => new RegExp(e, 'i'))
}}).toArray
有更好的工作机会。请注意,/bla/i
将匹配blabla
所以
collection.find({"name": {"$in": [/bla/i] } })
将匹配名称为blabla
的文档。不确定这是否是您想要的。
答案 1 :(得分:0)
如果您正在使用mongodb 3.2+,我建议您使用属性Collation,因为使用Regex可能会使查询速度变慢,您可以在创建索引和查询时使用它:
db.peeps.createIndex({UserName:-1}, { collation: {locale:'en', caseLevel:false, caseFirst: "off"} )
db.peeps.find({UserName:'bob'}).collation({locale:'en', caseLevel:false, caseFirst: "off"}) // 3 results!
然而,当我尝试使用排序规则时,我也遇到了这个问题,它使我的查询至少慢了2倍,所以我最终坚持在mongodb中插入lowerCase数据,然后在有效负载字段中验证并使用toLowerCase使用整理。