【问题标题】:MongoDB update and increment operation, when update data is an empty hashMongoDB更新和自增操作,当更新数据为空hash时
【发布时间】:2016-01-17 16:07:57
【问题描述】:

将 Ruby-on-Rails 与 ruby​​ 版本 2.2.0、MongoDB 版本 3.0.5 一起使用时,

当更新数据是空哈希时,我在尝试执行包含更新和增量的更新查询时遇到了奇怪的行为:

运行命令时:

(1)db.collection.update({'user_id' => 123456}, {'$set' => {}, '$inc' => { 'counter' => 1 }}, {:upsert => true})

counter 字段的值保持不变(没有变化)。

运行命令时:

(2)db.collection.update({'user_id' => 123456}, {'$inc' => { 'counter' => 1 }}, {:upsert => true})

正如预期的那样,counter 字段的值增加了 1。

有人可以向我解释一下为什么命令 (1) 的结果与命令 (2) 的结果不同吗?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb


    【解决方案1】:
    db.collection.update({'user_id' => 123456}, {'$set' => {}, '$inc' => { 'counter' => 1 }}, {:upsert => true})
    

    输出'$set' is empty. You must specify a field like so: {$mod: {<field>: ...}} 异常

    这可能是您的计数器未递增的原因。

    你用的是哪个版本的mongodb,我的是2.6

    【讨论】:

    • $set: {} 从 2.6 版本开始被更新框架拒绝。
    • 我用的是 3.0.5。感谢您的回答!我知道使用空散列更新有问题,但不知道是什么问题(空散列是我程序中的一个边缘情况)。
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2014-09-27
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2011-01-14
    • 2021-06-19
    • 1970-01-01
    相关资源
    最近更新 更多