【问题标题】:Batch insert documents on mongoid relations批量插入关于 mongoid 关系的文档
【发布时间】:2015-11-03 11:34:02
【问题描述】:

我已经阅读了批量插入的答案,例如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.messags.collection.insert(batch) 中的消息是什么?
  • @Krish user.messags 是一个错字,应该读作user.messages 及其用户和消息之间的 has_many 关系。 batch 只是一个包含有效文档的文档数组
  • 好的,那 user.messages 是用户还是用户对象?你能把详细的日志放在这里吗?
  • user 是 User 的一个实例。 user.messages 是(我想)关系对象。操作user.messages.collection.insert(batch) 的日志是:{"connectionId"=>2, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "好的"=>1.0}

标签: ruby-on-rails mongodb ruby-on-rails-4 mongoid


【解决方案1】:

试试这个:

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)

【讨论】:

    【解决方案2】:

    collection 返回驱动的集合对象。司机对 Mongoid 模型一无所知。您需要明确设置关联链接:

    batch = [{name: "dsfdf", user_id: user.id },{name: "dfsdfh", user_id: user.id}]
    
    
    user.messages.collection.insert(batch) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多