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