【问题标题】:Build queries in mongoose + node.js在 mongoose + node.js 中构建查询
【发布时间】:2020-01-26 03:48:06
【问题描述】:

我对 Node.js 和 MongoDB 还很陌生,但在构建查询时遇到了麻烦。

例如,我想根据请求过滤对象的日期。这就是我所做的:

var startDate = req.body.startDate;
var endDate = req.body.endDate;

let findParams = {
    userId:req.userId
};
if(startDate){
    findParams["start"] = { $gt: new Date(startDate)};
}
if(endDate){
    findParams["start"] = { $lt: new Date(endDate)};
}
if(startDate && endDate){
    findParams["start"] = { $gt: new Date(startDate),$lt: new Date(endDate)};
}
console.log(findParams);
WorkTime.find(findParams)

我必须每次都根据用户发送的内容构建“开始”参数。如果用户发送两个值(startDate 和 endDate),我必须再次构建 params 对象。

构建此查询的最佳方式是什么?

提前致谢!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    你的代码很好。没有任何“最优”的方式,但有点“优雅”

    try {
        var startDate = req.body.startDate;
        var endDate   = req.body.endDate;
    
        let findParams = {
            userId: req.userId
        };
    
        if (startDate || endDate) {
            findParams["start"] = { };
    
            if (startDate) {
                findParams["start"]["$gt"] = new Date(startDate);
            }
    
            if (endDate) {
                findParams["start"]["$lt"] = new Date(endDate);
            }
        }
    
        console.log(findParams);
        WorkTime.find(findParams)
    } (catch e) {
        console.log("Error occured: " + e);
    }
    

    【讨论】:

    • 感谢您的帮助!我发现你的解决方案更好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2016-01-24
    • 2011-04-20
    • 2023-04-06
    相关资源
    最近更新 更多