You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:15:58