node.js - 在 Node.js 中动态构建 Mongoose 聚合查询
问题描述
我正在尝试根据 POST api 调用中传递的数组变量的内容动态构建 mongoose 聚合查询,如下所示,但我总是收到错误“$or/$and/$nor 条目需要是完整对象”所以想知道是否有人可以在下面查看我的代码,请让我知道我可能遗漏了什么/做错了什么?
static search (searchData) {
let { searchTerm, filterBy } = searchData;
searchTerm = Utils.escapeRegexSpecialCharacters(searchTerm);
let filterByElementsLength = filterBy.length;
if(filterByElementsLength === 0) {
query.push({
$match: { 'bookTitle': new RegExp(searchTerm, 'i') },
});
}else if (filterByElementsLength > 0) {
query.push({
$match: { $and: [
{ 'bookTitle': new RegExp(searchTerm, 'i') },
filterBy
] }
});
}
}
考虑到 filterBy 内容使用 Postman 以 JSON (Application/json) 形式发布,内容示例如下:
"filterBy": [{"author": "Michael White" }, { "Price_Less_Than": "100" }],
谢谢你的支持
解决方案
找到了解决方案,将其发布在下面:
let matchQry = [];
matchQry.push({ 'bookTitle': new RegExp(searchTerm, 'i') });
for(let i = 0; i < filterByElementsLength; i++) {
matchQry.push(filterBy[i]);
}
query.push({
$match: { $and: matchQry }
});
如果有人认为可能有更好的解决方案,请告诉我。谢谢你的支持
推荐阅读
- scala - Scala如何根据大小使用不同的Class来实现Map和Set的性能提升?
- linux - 在安全启动的情况下执行 rdmsr / wrmsr?
- scala - 更新 ScalikeJDBC 中的返回查询
- mysql - 如何重命名在mysql中用作外键的字段?
- python-3.x - 内置的 Exception 类需要哪些参数?
- r - 如何完成对数据框的每次观察?
- c++ - C++ 读取/写入两个不同的文件(需要帮助了解使用哪种语法)
- image - 使用 ImageMagick 在多个图像之间转换
- python - 如何防止在kivy应用程序中关闭x窗口
- git - Git bash 不显示波浪线