仅当整个字符串列表与 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 但我做不到。

在此先感谢您的帮助

可以使用聚合框架实现

playground

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"
              }
            ]
          }
        }
      ]
    }
  }
])