Node.js中MongoDB聚合查询使用变量返回undefined的问题
解决MongoDB Aggregate查询中变量用[]包裹导致undefined的问题
嘿,我一眼就发现问题所在啦!你把变量用方括号[]包起来的操作,在MongoDB的查询语法里是错误的——这里的方括号会被解析成数组字面量,而不是直接引用变量的实际值。
为什么会出现undefined?
当你写$gte: [start_time]时,相当于创建了一个只包含start_time变量的数组。如果start_time变量在当前作用域里没有正确定义,或者赋值有问题,这个数组就会变成[undefined],MongoDB自然没法匹配到任何数据,返回的结果就会不符合预期。而你直接传入实际值(比如$gte: ["2024-01-01"])时,数组里是有效的值,所以查询能正常工作。
修正后的代码
只需要把包裹变量的方括号全部去掉,直接使用变量本身就可以了:
var myquery = [ { $match: { time: { $gte: start_time, $lt: end_time }, payeeFsp: dfsp_given } }, { $group: { _id: null, total: { $sum: "$amount" } } } ]; dbo.collection("transaction_history").aggregate(myquery).toArray(function(err, res) { if (err) throw err; console.log(res); db.close(); });
额外提示
别忘了确认start_time、end_time、dfsp_given这些变量在当前作用域内是已经正确赋值的:
start_time和end_time最好是MongoDB能识别的日期对象或者标准日期字符串(比如YYYY-MM-DD格式)dfsp_given要和集合中payeeFsp字段的取值类型一致(比如都是字符串)
内容的提问来源于stack exchange,提问作者Abhishek Malik
相关产品推荐
相关产品推荐

