【发布时间】:2016-06-15 12:35:00
【问题描述】:
我正在尝试查找(使用正则表达式)一个数组字段并仅返回该元素
这是我的数据
[
{
"_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: invalid operator $regex”
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);
});
【问题讨论】: