我如何使用 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/