首页 > 解决方案 > 在 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" }],

谢谢你的支持

标签: node.jsmongoose

解决方案


找到了解决方案,将其发布在下面:

        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 }                
        });

如果有人认为可能有更好的解决方案,请告诉我。谢谢你的支持


推荐阅读