You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中对应RethinkDB的r.row是什么?如何实现字段减1更新?

MongoDB中实现文档属性减1的操作及r.row等价物说明

我刚好对RethinkDB和MongoDB的更新语法都比较熟悉,来帮你解决这个问题:

一、实现指定文档属性减1的操作

在MongoDB里,针对这种原子性的数值增减操作,有专门的$inc操作符,比手动写表达式更高效也更安全(避免并发冲突)。对应你给出的ReQL语句,MongoDB的写法如下:

MongoDB Shell 代码示例

// 如果你的文档_id是ObjectId类型(MongoDB默认类型)
db.table.updateOne(
  { _id: ObjectId('documentId') },
  { $inc: { propToUpdate: -1 } }
)

// 如果你的文档_id是字符串类型
db.table.updateOne(
  { _id: 'documentId' },
  { $inc: { propToUpdate: -1 } }
)

这里的updateOne对应RethinkDB里的get(...).update()——因为get只会匹配单个文档,所以用updateOne确保只更新一个目标文档;$inc: { propToUpdate: -1 }就是告诉MongoDB把propToUpdate字段的值减1,这个操作是原子执行的。

二、RethinkDB的r.row在MongoDB中的等价物

RethinkDB的r.row用来引用当前正在操作的文档,在MongoDB里,对应的是**$$CURRENT**(主要用于聚合管道或聚合式更新场景)。

比如当你需要更复杂的字段更新逻辑(而不是简单的增减),就可以用$$CURRENT来获取当前文档的字段值。举个和你需求对应的例子,用聚合管道实现减1:

db.table.updateOne(
  { _id: 'documentId' },
  [
    { $set: { propToUpdate: { $subtract: [ '$$CURRENT.propToUpdate', 1 ] } } }
  ]
)

不过要注意:对于简单的数值增减,优先用$inc操作符,它的性能比聚合管道更新更好;$$CURRENT更适合处理复杂的计算逻辑(比如基于多个字段的值更新某个字段)。

内容的提问来源于stack exchange,提问作者Matt Gween

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:54:02