我正试图在rails控制台中对我的数据运行更新,出于某种原因,更新一个属性会导致Mongoid将其他属性设置为空:

1.9.3p194 :044 > User.first().cart.cartitems
 => [#<Cartitem _id: 5047eef3c8bafa761100001a, _type: nil, quantity: 1000, scentid: 1>]
1.9.3p194 :047 > User.first().cart.cartitems.where(scentid:1).update(quantity:100)
=> nil
1.9.3p194 :048 > User.first().cart.cartitems
=> [#<Cartitem _id: 5047ef65c8bafa761100001c, _type: nil, quantity: 100, scentid: nil>]

注意scentid是如何设置为nil的我也尝试过使用.set(:quantity,100),但当我再次查询cartitems时,这种情况不会持续。
这是正常的行为吗?
谢谢!

最佳答案

是否有可能运行的是纯mongodb ruby driver.update()方法而不是mongoid持久化方法?如果是这样,观察到的行为将是预期的update()重写完整文档,如下所述:http://api.mongodb.org/ruby/current/file.TUTORIAL.html#Updating_Documents_with_update
您可以将$set运算符用于:

.update({"scentid" => 1}, {"$set" => {"quantity" => 100}})

或者尝试Mongoid的update_attributes()或者任何其他合适的持久性方法:http://mongoid.org/en/mongoid/docs/persistence.html#atomic

关于ruby-on-rails - Mongoid更新查询将其他属性设置为nil?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12291534/

10-13 09:11