Mongoose中updateMany配合$and条件更新文档匹配异常如何解决?
问题根因
你当前的查询条件中数值比较的方向写反了:
- 现有代码的条件
{ tp_buy: { $gte: incomingData.bid } }含义是文档的tp_buy字段值大于等于传入的incomingData.bid值,和你预期的「传入的incomingData.bid大于等于文档tp_buy」逻辑完全相反。
你给出的更新后示例中tp_buy为1.16583、incomingData.bid为1.16487,刚好满足tp_buy >= incomingData.bid的条件,所以会触发更新,属于业务逻辑写反,不是类型或语法错误。
修正方案
把比较运算符从$gte替换为$lte即可实现预期逻辑,调整后的完整代码如下:
db.dbDB.collection("buy").updateMany( { $and: [ { profit: { $eq: null } }, { tp_buy: { $lte: incomingData.bid } }, ], }, { $set: { profit: true, execute_p: incomingData.bid, }, } );
调整后查询条件的含义为:文档profit字段值为null 且 文档tp_buy字段值小于等于传入的incomingData.bid,完全匹配你需要的业务逻辑。
可选优化
MongoDB中多个顶级查询条件默认就是$and逻辑关系,不需要显式声明$and,可以简化代码结构:
db.dbDB.collection("buy").updateMany( { profit: null, tp_buy: { $lte: incomingData.bid } }, { $set: { profit: true, execute_p: incomingData.bid } } );
内容的提问来源于stack exchange,提问作者chichi
相关产品推荐
相关产品推荐

