node.js - Mongoose 查询 : compare two values on same document

标签 node.js mongodb mongoose

我如何使用 Mongoose 查询 Mongo 集合以查找在它们自己的两个属性之间具有特定关系的所有文档?

例如,我如何查询一个 characters 集合来找到所有那些 currentHitPoints 值小于它们的 maximumHitPoints 值的字符?或者所有那些 currentPledgedMoney 少于他们的 pledgeGoal项目

我试过这样的事情:

mongoose.model('Character')
    .find({
        player: _currentPlayer
    })
    .where('status.currentHitpoints').lt('status.maximumHitpoints')
    .exec(callback)

但由于 lt 参数必须是 Number,所以我收到了错误。如果我使用 $.status.maximumHitpoints 也是如此(我希望 Mongoose 能够像执行收集操作时那样解决它)。

这是可以在查询中完成的事情吗?我希望如此,但无法找到方法。否则,我可以使用 underscore 过滤整个集合,但我怀疑这会对性能产生负面影响。

PS:我也尝试过对 find 调用使用类似的方法,没有骰子。

最佳答案

MongoDB 3.6 及以上版本支持查询语言内的聚合表达式:

db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )

https://docs.mongodb.com/manual/reference/operator/query/expr/

关于node.js - Mongoose 查询 : compare two values on same document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280059/

相关文章:

node.js - 将nodejs应用程序上传到AWS EC2

javascript - Node js从mongodb obejct内部值返回未定义

javascript - es6 代理安全深层对象

node.js - Sequelize 路由器不起作用。当我访问页面时,我得到 "Cannot GET/"

MongoDB $lookup 和 $map 对象数组

java - 哪个是 mongodb 访问的最佳 java 驱动程序?

javascript - 无法使用 Mongoose 从对象数组中删除元素

node.js - 发送带有 id 的 GET 请求的错误请求(ExpressJS)

javascript - 我如何将此 require 写为 es6 import 语句

node.js - Mongoose 无法将 ref -Schema.Types.ObjectId- 设置为其他文档