MongoDB聚合查询在Robo3T正常运行 代码执行返回空数组如何解决
排查点1:日期参数类型不匹配
你代码里把monthData转成了ISO字符串,而MongoDB中updatedAt存储的是Date类型,字符串和日期类型比较不会匹配到结果,Robo3T里用的是ISODate()类型对象所以可以正常查询。
你需要去掉.toISOString()调用,直接传入Date对象即可:
// 错误写法 monthData= await new Date(monthData.getFullYear(), monthData.getMonth(), 2).toISOString(); // 修正写法 monthData = new Date(monthData.getFullYear(), monthData.getMonth(), 2);
排查点2:lookup返回值是数组,匹配规则验证
$lookup的as字段返回的始终是数组,你后续直接用"result.company"做匹配虽然MongoDB支持隐式匹配数组内元素,但是如果是一对一关联的场景,建议在lookup之后加一步$unwind拆解数组,避免后续分组时取到数组值而非单个值:
{ "$lookup": { "from": "results", "localField": "result", "foreignField": "_id", "as": "result" }}, // 新增这行 { "$unwind": "$result" }, { "$match": { "result.company": new mongoose.Types.ObjectId(companyId)}},
排查点3:入参校验
打印你代码里的companyId值,确认和Robo3T中使用的ObjectId("6114dc9193a52d3278aa486f")完全一致,排除传参错误、空值的情况。
排查点4:开启Mongoose调试确认实际执行语句
在代码初始化位置加一行mongoose.set('debug', true),运行后会打印实际发送到MongoDB的查询语句,和Robo3T中的语句逐字段对比,就能快速找到差异点。
内容的提问来源于stack exchange,提问作者chandrasekharreddy kotha
相关产品推荐
相关产品推荐

