gpt4 book ai didi

ruby-on-rails - mongoid 批量更新

转载 作者:IT老高 更新时间:2023-10-28 13:33:32 25 4
gpt4 key购买 nike

我想每小时更新大量文档。

这里是相当简单的模型:

class Article
include Mongoid::Document
field :article_nr, :type => Integer
field :vendor_nr, :type => Integer
field :description, :type => String
field :ean
field :stock
field :ordered
field :eta

所以每小时我都会得到一份新的库存 list ,其中 :stock,:ordered 和 :eta “可能”已经改变我需要更新它们。

编辑:库存 list 只包含

:article_nr, :stock, :ordered, :eta

我解析成一个哈希

在 SQL 中,我会将 article_nr 外键到“stock”表,删除整个 stock 表,然后运行“collection.insert”或类似的东西

但这种方法似乎不适用于 mongoid。有什么提示吗?我无法理解collection.update并且更改 belongs_to 和 has_one 上的外键似乎不起作用(试过了,但是 Article.first.stock 是 nil)

但是必须有一种比遍历 stocklist 哈希数组并执行更快的方法像

Article.where( :article_nr => stocklist['article_nr']).update( stock: stocklist['stock'], eta: stocklist['eta'],orderd: stocklist['ordered'])

最佳答案

更新中

您可以使用 Criteria#update_all 通过条件自动更新数据库中的多个文档。这将对传递给方法的所有属性执行原子 $set。

 # Update all people with last name Oldman with new first name.
Person.where(last_name: "Oldman").update_all(
first_name: "Pappa Gary"
)

现在我可以理解更多了。假设您的文章编号是 uniq,您可以尝试做类似的事情。

class Article
include Mongoid::Document
field :article_nr
field :name
key :article_nr

has_many :stocks
end

class Stock
include Mongoid::Document
field :article_id
field :eta
field :ordered
belongs_to :article
end

那么当你创建股票时:

Stock.create(:article_id => "123", :eta => "200")

然后它将自动分配给具有 article_nr => "123" 的文章所以你总是可以调用最后的股票。

my_article.stocks.last

如果您想更精确,请在 Stock 中添加字段 :article_nr,然后 :after_save 使 new_stock.article_id = new_stock.article_nr

这样您无需进行任何更新,只需创建新库存,它们总是会在插入时被放入正确的文章中,您可以获得最新的。

关于ruby-on-rails - mongoid 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com