MongoDB(Node.js)中find()如何访问文档字段执行运算条件查询
你当前的写法是在Node.js运行环境直接计算price_clic * number_view的固定值,调用的是当前上下文的变量,并非每条文档自身存储的price_clic和number_view字段值,无法实现预期的查询效果。
正确实现方式
MongoDB 3.6及以上版本支持$expr操作符,可以在查询条件中使用聚合表达式,直接引用文档自身字段完成运算:
Model.find({ $expr: { $gte: [ "$daily_price", // 用$+字段名引用文档自身的daily_price字段 { $multiply: ["$price_clic", "$number_view"] } // 用$multiply运算操作符计算两个字段的乘积 ] } })
旧版本兼容方案(不推荐)
如果使用的MongoDB版本低于3.6,可以用$where实现,但该方式性能差、存在注入风险,非必要不要使用:
Model.find({ $where: function() { return this.daily_price >= this.price_clic * this.number_view } })
内容的提问来源于stack exchange,提问作者raphael
相关产品推荐
相关产品推荐

