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
相关产品推荐
相关产品推荐

