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



我有一个这样结构的文档

{
_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'],
}
}

所以我不能找出搜索如果任何选项键包含一个数组,其中包含一些字符串

更精确:我想查询整个文档并返回文档,如果任何选择键的数组有匹配查询的元素。

所以如果我搜索'yyy',它应该简单地返回文档的_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
}
}
])

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

游乐场

最新更新