Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – Mongoose Query:比较同一文档中的两个值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用Mongoose@L_200_0@mongo集合以查找在两个属性之间具有特定关系的所有文档?

例如,如何查询字符集以查找currentHitPoints值小于maximumHitPoints值的所有字符?或者所有那些目前的承诺金额低于承诺目标的项目?

我试过这样的事情:

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

但我得到错误,因为lt参数必须是一个数字.如果我使用$.status.maximumHitpoints(我希望Mongoose能够像执行收集操作时那样解决它),情况也是如此.

这是可以在查询中完成的吗?我希望如此,但不知道如何.否则我可以使用下划线过滤整个集合,但我怀疑这会对性能产生负面影响.

PS:我也尝试过使用类似的方法查找调用,没有骰子.

解决方法

感谢Aniket在问题评论中的建议,我发现使用以下语法可以使用Mongoose完成相同的操作:

@H_202_11@mongoose.model('Character') .find({ player: _currentPlayer }) .$where('this.status.currentHitpoints < this.status.maximumHitpoints') .exec(callBACk)

注意使用$where方法而不是where方法.

编辑:要扩展下面的Derick’s评论,一个性能更敏感的解决方案是在Mongoose模式中包含一个包含比较结果的布尔属性,并在每次保存文档时更新它.这可以通过使用Mongoose scheR_596_11845@a插件轻松实现,所以你会有类似的东西:

var CharacterscheR_596_11845@a = new mongoose.scheR_596_11845@a({
    // ...
    status: {
        hitpoints: number,maxHitpoints: number,isInFullHealth: {type: Boolean,default: falsE}
    }
})
.plugin(function(scheR_596_11845@a,options) {
     scheR_596_11845@a.pre('save',function(next) {
         this.status.isInFullHealth = (this.status.hitPoints >= this.status.maxHitpoints);

         next();
     })
 })

大佬总结

以上是大佬教程为你收集整理的node.js – Mongoose Query:比较同一文档中的两个值全部内容,希望文章能够帮你解决node.js – Mongoose Query:比较同一文档中的两个值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。