聚合框架:包含中间结果的项目查询

时间:2018-04-24 09:52:47

标签: javascript node.js mongodb mongoose

我正在制作一个以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 列?

此外,是否有更好的做法来实现此功能?

0 个答案:

没有答案