3
我試圖找到(使用正則表達式)的陣列場$過濾器並返回該元素只有正則表達式作爲投影
這是我的數據
[
{
"_id": "56d6e8bbf7404bd80a017edb",
"name": "document1",
"tags": [
"A area1",
"B area2",
"C area3"
]
},
{
"_id": "56d6e8bbf7404bd82d017ede",
"name": "document2",
"tags": [
"b_area3",
"b_area4",
"b_area5"
]
}
]
我查詢
var query=new RegExp('^'+string, "i");
Model.find({tags:query},{'tags.$': 1}, function(err,data){
if(err) console.log(err);
res.json(data);
});
此查詢只選擇標籤字段(如我所願),但選擇第一個元素。我需要匹配查詢的元素。
編輯:我也試過mongodb聚合,$ filter cond是錯誤的。我得到的錯誤「MongoError:無效操作$正則表達式」
caseNote.aggregate([
{ $match: {tags:query}},
{ $project: {
tags: {$filter: {
input: 'tags',
as: 'item',
cond: {$regex: ['$$item', query]}
}}
}}
], function (err, result) {
if (err) {
console.log(err);
} else {
res.json(result);
}
});
EDIT2:在@zangw的建議,這是貓鼬的版本,但它是不完整的:標籤領域是好的(需要測試) ,但查詢仍然返回整個文檔。
caseNote
.aggregate({ $match: {tags: {$in:['area3']}}})
.unwind('tags')
.exec(function(err,d){
res.json(d);
});
請參考我的編輯以上 – alfredopacino
@ the.websurfer,請儘量先放鬆,然後做'$ match' ... – zangw
@ the.websurfer,我有用測試數據更新了我的答案。您之前的代碼不會遵循我的回答... – zangw