我在过滤特定文档的值数组时遇到了问题。 集合名称是列表,我是一个带有'字段'的文档。作为_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'","代码" :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" ] }
我的mongo db版本是3.2.9。
答案 0 :(得分:0)
问题似乎不是正则表达式:
db.lists.aggregate([
{
$match : { _id: "fields"}
},
{
$project: {
values: {
$filter: {
input: "$values",
as: "val",
cond: { "$$val.name" : "sku" }
}
}
}
}
]);
断言:命令失败:{" ok" :0," errmsg" :"无效的运营商' $$ val.name'","代码" :15999}:聚合失败