1

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

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) ,但是当我再次查询 caritems 时,这种情况不会持续存在。

这是正常行为吗?

谢谢!

4

1 回答 1

4

您是否有可能运行纯 MongoDB rub​​y​​ 驱动程序 .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

于 2012-09-06T02:08:27.380 回答