【问题标题】:Ruby datajob with mongoid带有 mongoid 的 Ruby 数据作业
【发布时间】:2011-08-22 19:20:24
【问题描述】:

我正在尝试使用 ruby​​ 和 mongoid 从 oracle 数据库中提取一些数据并进入我的 mongoDB 以便对其执行一些操作。

问题是:

我创建了包含 Mongoid::Document 的“记录”类并设置了我的所有字段,并且已经分配了来自 oracle 数据库的数据,并将我的所有 BSON 对象存储在一个数组中。

现在我的问题是:我如何保存它们?

这是我的一段代码

query = db.report # Sequel Object

query.each do |row|
  r = Record.new #Mongoid class
  r.directory_name    = row[:directory_name]
  r.directory_code    = row[:directory_id]
  r.directory_edition = row[:edition]
  r.last_updated      = row[:updated]
  r.canvass           = row[:canvass_id]
  r.specialty_item    = row[:item]
  r.production_number = row[:prodnr]
  r.status            = row[:exposure_status]
  r.scanned_date      = row[:scandate]
  r.customer_id       = row[:customer_id]
  r.sales_rep         = row[:sales_rep_name]
  r.phone             = row[:phone]
  r.customer_name     = row[:customer_name]
  records << r
end

【问题讨论】:

    标签: ruby mongodb mongoid


    【解决方案1】:

    你需要做Record.collection.insert(records)。虽然请注意,这将跳过您在 Mongoid 模型中编写的任何验证,但会比创建 mongoid 记录并保存它们快一点,因为它将直接使用 ruby​​ mongo 驱动程序。仅当您知道数据是一致的时才应该这样做。

    如果您想在将数据保存到 MongoDB 之前对数据进行所有验证,则应创建模型而不是将它们放入数组中。

    所以你可以根据自己的喜好用三种方式持久化MongoDB中提取的数据:

    • 使用 mongo 驱动程序一次插入所有记录,但请注意您创建的数组可能很大:
    query.each 做 |row| ...... 结尾 Record.collection.insert(记录)
    • 使用 mongo 驱动一次插入一条记录(将 records &lt;&lt; r 替换为新行)
    query.each 做 |row| ...... Record.collection.insert(r) 结尾
    • 使用 Mongoid 以及所有验证和回调一次插入一条记录(将 records &lt;&lt; r 替换为新行)
    query.each 做 |row| ...... r.save 结尾


    更新:错过了您已经在创建记录因此 mongo 驱动程序建议。如果你想直接使用 mongo 驱动,你应该使用哈希而不是 Mongoid 模型。即代替

    r = Record.new r.status = 行[:状态] # 复制更多数据

    你应该这样做

    r = {} r[:status] = 行[:status] # 复制更多数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2014-01-07
      • 2019-10-02
      • 1970-01-01
      相关资源
      最近更新 更多