我在mongodb中的文档如下:
[{
"_id" : 1,
"name" : "Himanshu",
"tags" : ["member", "active"]
},{
"_id" : 2,
"name" : "Teotia",
"tags" : ["employer", "withdrawal"]
},{
"_id" : 3,
"name" : "John",
"tags" : ["member", "deactive"]
},{
"_id" : 4,
"name" : "Haris",
"tags" : ["employer", "action"]
}]
{"tags" : ["member", "act"]}
这样的过滤器数组,它将返回ID的1
和2
,因为这里member
是完全匹配的,{ {1}}在两个文档中部分匹配。act
的过滤器,则它应该回复id的{"tags" : ["mem"] }
和1
3
的过滤器,那么它应该只回答{"tags" : ["member", "active"]}
。答案 0 :(得分:2)
这里您基本上需要两个概念。
将数组的每个输入字符串转换为锚定在字符串“开始”位置的正则表达式:
使用$all
运算符应用列表,以确保“所有”匹配:
var filter = { "tags": [ "mem", "active" ] };
// Map with regular expressions
filter.tags = { "$all": filter.tags.map(t => new RegExpr("^" + t)) };
// makes filter to { "tags": { "$all": [ /^mem/, /^active/ ] } }
// search for results
db.collection.find(filter);