在 mongoid 关系上批量插入文档

Batch insert documents on mongoid relations

我已阅读此处有关批量插入的答案,例如batch insert mongoid

我有 2 个合集:

 class User
  include UpdateUserOrCreate
  include Mongoid::Document
  include Mongoid::Timestamps

  has_many :messages, class_name: "Api::V1::Message", autosave: true, validate: false
  has_many :message_export_requests, class_name: "Api::V1::MessageExportRequest", autosave: true, validate: false
end

 class Message
  include Mongoid::Document
  include Mongoid::Timestamps

  belongs_to :user, class_name: "Api::V1::User", autosave: true, foreign_key: :user_id 
end

我有一个文档数组:

batch = [{name: "dsfdf" },{name: "dfsdfh"}]

我正在尝试做:

user.messages.collection.insert(batch) 

但结果是Message文档保存为user_id = nil.

如何在设置外键的情况下通过关系批量保存数组中的文档??

试试这个:

user.messages.create(batch)

此外,在您的情况下,您需要将其添加到消息模型中:

field :name

===更新=== 也许这可能有用:

user = ... # get user somehow
batch = [{name: "dsfdf" },{name: "dfsdfh"}].collect { |msg| {name: msg.fetch(:name), user_id: user.id} }
Message.collection.insert(batch)

collection returns 驱动程序的集合对象。驱动程序不了解 Mongoid 模型。您需要明确设置关联链接:

batch = [{name: "dsfdf", user_id: user.id },{name: "dfsdfh", user_id: user.id}]


user.messages.collection.insert(batch)