我在过滤特定文档的值数组时遇到问题。 集合名称是列表,我有一个'fields'为_id的文档。 这里是文档的一部分:
{
"_id" : "fields",
"values" : [
{
"name" : "sku",
"dt" : "text"
},
{
"name" : "title",
"dt" : "text"
},
{
"name" : "desc",
"dt" : "text"
},
{
"name" : "brand",
"dt" : "text"
},
{
"name" : "cur",
"dt" : "text"
},
{
"name" : "l_img",
"dt" : "text"
},
.....
]
}
我需要检索匹配指定正则表达式的字符串数组。
这是我的查询:
db.lists.aggregate([
{
$match : { _id: "fields"}
},
{
$project: {
values: {
$filter: {
input: "$values",
as: "val",
cond: { "$$val.name" : { $regex: /sk/i } }
}
}
}
}
]);
,这是我得到的错误:
断言:命令失败:{ “OK”:0, “ERRMSG”:“无效的操作“$ $ val.name'“,”code“:15999}:聚合失败
我试过了这个帖子How to filter array in subdocument with MongoDB的情况,它工作正常,但是为我的需要和文档结构实现。我在哪里做错了?
最古老的语法(以前的3.2版)工作正常:
db.lists.aggregate(
{ $match: {_id: "fields"}},
{ $unwind: '$values'},
{ $match: {'values.name': { $regex: /sk/i }}},
{ $group: {_id: '$_id', values: {$push: '$values.name'}}})
其实我得到:
{ "_id" : "fields", "values" : [ "sku", "sku_parent", "skin_type", "skin_tone" ] }
我蒙戈DB版本3.2.9是。
你尝试把只有一个$在$$ val.name –
$正则表达式不支持表达过滤器,尝试用它工作 – AshokGK
嗨AshokGK其他表达式,这个问题似乎不是正则表达式:看到我的后续文章 –