在docs他們沒有提及Criteria#update_attributes
和Criteria#update_all
之間的細微差異。後者不更新updated_at
文件字段。Mongoid:update_attributes vs update_all
是那種想要的行爲?如果是這樣,不應該在文檔中反映出來嗎?
在docs他們沒有提及Criteria#update_attributes
和Criteria#update_all
之間的細微差異。後者不更新updated_at
文件字段。Mongoid:update_attributes vs update_all
是那種想要的行爲?如果是這樣,不應該在文檔中反映出來嗎?
隱含的假設是你熟悉ActiveRecord,他們假設你假設Mongoid的行爲像ActiveRecord(除非它不能)。在ActiveRecord的,update_all
is explicitly documented不調用回調:
update_all(updates)
[...] This method constructs a single SQL UPDATE statement and sends it straight to the database. It does not instantiate the involved models and it does not trigger Active Record callbacks or validations. [...]
Mongoid的update_all
一個update
操作同樣送入MongoDB中,而不調用回調。
Mongoid文檔(像往常一樣在Ruby中)在重要細節上有點薄,所以你必須習慣於猜測和閱讀你正在使用的庫的來源。包括測試以驗證您的猜測也是避免升級過程中不愉快的一個好主意。
> c.update_all(resources)throws:NoMethodError:未定義的方法'update_all' - 是否有現代等價物? –
@RomanGaufman [Mongoid docs](https://docs.mongodb.com/mongoid/6.1/api/Mongoid/Contextual/Mongo.html#update_all-instance_method)建議'update_all'應該可以工作。具體是什麼'c'?哪個版本的Mongoid? –