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
}
}
])
重塑并找到你需要的东西。忽略创建的其他临时字段。
我有一份这样结构的文档
{
_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
}
}
])
重塑并找到你需要的东西。忽略创建的其他临时字段。