在Node.js中动态构建Mongoose聚合查询

时间:2019-09-29 17:21:21

标签: node.js mongoose

我试图根据在POST api调用中传递的数组变量的内容动态构建猫鼬聚合查询,如下所示,但我总是收到错误“ $ 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 
            ] }                
        });
    }
}

考虑到使用Postman通过以下内容示例将filterBy内容发布为JSON(Application / json):

"filterBy": [{"author": "Michael White" }, { "Price_Less_Than": "100" }],

感谢您的支持

1 个答案:

答案 0 :(得分:0)

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

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

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