我在過濾特定文檔的值數組時遇到問題。 集合名稱是列表,我有一個'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其他表達式,這個問題似乎不是正則表達式:看到我的後續文章 –