gpt4 book ai didi

mongodb - 正则表达式作为投影中的 $filter

转载 作者:可可西里 更新时间:2023-11-01 09:12:14 26 4
gpt4 key购买 nike

我试图找到(使用正则表达式)一个数组字段并仅返回该元素

这是我的数据

  [
{
"_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:无效的运算符 $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 的建议,这是 mongoose 版本,但它不完整:标签字段没问题(需要测试),但查询仍会返回整个文档。

 caseNote
.aggregate({ $match: {tags: {$in:['area3']}}})
.unwind('tags')
.exec(function(err,d){
res.json(d);
});

最佳答案

根据本期Use $regex as the expression in a $cond ,对于当前的 mongo 版本,$regex 不能与 cond 一起使用。

也许你可以试试这个,通过$match过滤area3,然后通过$group得到所有匹配的标签,然后去掉_id$project

caseNote.aggregate([{$unwind: '$tags'},
{$match: {tags: /area3/}},
{$group: {_id: null, tags: {$push: '$tags'}}},
{$project: {tags: 1, _id: 0}}])
.exec(function(err, tags) {
if (err)
console.log(err);
else
console.log(tags);
});

结果:

{ "tags" : [ "C area3", "b_area3" ] }

关于mongodb - 正则表达式作为投影中的 $filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com