我正在制作一个以JSON格式提供数据的Web服务。它通过以数组的形式获取一些过滤器来实现,然后解析这些过滤器,然后检查过滤器中的任何值是否存在于文档的特定字段中(该字段也是一个数组),它返回所有这些文件。
此处,过滤器是查询数组。 typeFilters 是每个文档中的数组。我正在使用$ project来实现它。
这是我的代码:
function returnAllByFilter(filter, callback) {
ModuleDBService.aggregate([{
$project: {
_id:1,
title:1,
typeFilters:1,
filteredResults: {
$let: {
vars: {
filter: [0,2],
},
in: {
$setIntersection: ["$$filter", "$typeFilters"]
}
}
}
}
},
{
$match: {
filteredResults: {
$ne: []
}
}
}
], function (err, data) {
if (err) {
console.log(err)
callback(null);
} else {
callback(data);
}
})
}
此代码可以正常运行,但它也会预设字段 filteredResults 。
输出样本:
[
{
"_id": "3133343230313834754e5871",
"title":"Physics 202:1",
"typeFilters": [
0,
1,
3
],
"filteredResults": [
1
]
}
]
我尝试从查询中删除该字段并将其直接替换为其中的内容," 我收到错误说"未知的顶级操作符:$ let &# 34 ;. 如何阻止此查询同时投影 filteredResults 列?
此外,是否有更好的做法来实现此功能?