仅当整个字符串列表与 MongoDB 中的正则表达式匹配时如何检索元素
How to retrieve element only if the whole list of string matches a regex in MongoDB
这是上下文,我在数据库中有元素:
db.collection.insertMany([
{ ‘_id’: 1, ‘items’: [‘abc’, ‘ab’]},
{ ‘_id’: 2, ‘items’: [‘abc’, ‘bc’]},
])
我想检索所有项目都与我的正则表达式匹配的元素,在这种情况下,如果第一个字母是“a”,我希望它匹配。
我试过了:
db.collection.find({
“items”:{ $regex : /^a/}}
})
但它似乎也匹配我们示例中的第二个元素,因为其中一项与正则表达式匹配,我需要两者都匹配。
我尝试了其他运算符,例如 $all 和 $and 但我做不到。
在此先感谢您的帮助
可以使用聚合框架实现
db.collection.aggregate([
{
"$project": {
"items": "$items",
// preserve original array
"a": {
"$filter": {
//To check each array item
"input": "$items",
"as": "item",
"cond": {
"$regexFind": {
"input": "$$item",
"regex": "a",
"options": "i"
}
}
}
}
}
},
{
"$match": {
"$and": [//Check for matching condition
{
$expr: {
"$ne": [//skip unmatched docs
"$a",
null
]
}
},
{
$expr: {//check for all the elements match
"$eq": [
{
"$size": "$a"
},
{
"$size": "$items"
}
]
}
}
]
}
}
])
这是上下文,我在数据库中有元素:
db.collection.insertMany([
{ ‘_id’: 1, ‘items’: [‘abc’, ‘ab’]},
{ ‘_id’: 2, ‘items’: [‘abc’, ‘bc’]},
])
我想检索所有项目都与我的正则表达式匹配的元素,在这种情况下,如果第一个字母是“a”,我希望它匹配。
我试过了:
db.collection.find({
“items”:{ $regex : /^a/}}
})
但它似乎也匹配我们示例中的第二个元素,因为其中一项与正则表达式匹配,我需要两者都匹配。
我尝试了其他运算符,例如 $all 和 $and 但我做不到。
在此先感谢您的帮助
可以使用聚合框架实现
db.collection.aggregate([
{
"$project": {
"items": "$items",
// preserve original array
"a": {
"$filter": {
//To check each array item
"input": "$items",
"as": "item",
"cond": {
"$regexFind": {
"input": "$$item",
"regex": "a",
"options": "i"
}
}
}
}
}
},
{
"$match": {
"$and": [//Check for matching condition
{
$expr: {
"$ne": [//skip unmatched docs
"$a",
null
]
}
},
{
$expr: {//check for all the elements match
"$eq": [
{
"$size": "$a"
},
{
"$size": "$items"
}
]
}
}
]
}
}
])