在 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)
我已阅读此处有关批量插入的答案,例如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)