mongodb, 查询 属性 中数组的任何元素是否包含一些正则表达式

mongodb, query if any element of array within property contain some regex

我有一份这样结构的文档

{
_id:'1'
text:'xxxxxxxc'
choices:{
    a:['xxx','yyy','zzz'],
    b:['aaa','bbb','ccc'],
    c:['lll','mmm','ddd'],
    }
}

....and many other document...

{
_id:'2'
text:'xxxxxxxc'
choices:{
    a:['ooo','sss','qqq'],
    b:['iii','hhh','ggg'],
    c:['ddd','eee','fff'],
    }
}

所以我不知道要搜索 任何一个选择键是否包含一个包含一些字符串的数组

更准确地说:我想查询整个文档和 return 文档,如果任何选择键的数组具有与查询匹配的元素。

所以如果我搜索 'yyy' ,它应该只是 return 文档 of_id:1 和其他文档,在其任何选择键的数组中都有 'yyy' (无论是在 a、b、c 中,这些键都可以超过 c,即到 z 及以后) ...并且 不是 _id:2 因为它在其选择的任何数组中都没有元素 'yyy'

db.collection.aggregate([
  {
    $addFields: {
      "c": {
        "$objectToArray": "$choices"
      }
    }
  },
  {
    $match: {
      "c.v": "yyy"
    }
  },
  {
    "$project": {
      c: 0
    }
  }
])

重塑并找到你需要的东西。忽略创建的其他临时字段。

Playground