如何在mongoid中使用时间字符串批量插入数据

时间:2013-10-30 06:07:06

标签: mongoid

class Topic
  include Mongoid::Document
  #....
  field :public_at, type: DateTime
  #...
end

Topic.collection.insert([{public_at: "2013-10-30 11:45:56"}])

$> Topic.first

  

Hirb错误:未定义的方法`getlocal'for“2013-10-30 11:45:56”:String

未转换为时间。

1 个答案:

答案 0 :(得分:1)

问题是您要在需要时间的位置插入字符串 在Moped驱动程序级别进行批处理(哈希数组)插入。 MongoDB支持BSON类型的UTC日期时间,它由Moped驱动程序映射到Ruby Time。 以下测试显示了使用Time#parse将String转换为Time所需的内容。 请注意,您的public_at字段是在Topic的模型级别指定的DateTime。 希望这会有所帮助。

测试/单元/ topic_test.rb

require 'test_helper'

class TopicTest < ActiveSupport::TestCase
  def setup
    Topic.delete_all
    puts
  end
  test "0. mongoid version" do
    puts "Mongoid::VERSION:#{Mongoid::VERSION}\nMoped::VERSION:#{Moped::VERSION}"
  end
  test "batch insert" do
    time = Time.parse("2013-10-30 11:45:56")
    Topic.collection.insert([{public_at: time}])
    assert_equal 1, Topic.count
    assert_equal DateTime, Topic.first.public_at.class
    p Topic.first
  end
end

$ rake test

Run options:

# Running tests:

[1/2] TopicTest#test_0._mongoid_version
Mongoid::VERSION:3.1.5
Moped::VERSION:1.5.1
[2/2] TopicTest#test_batch_insert
#<Topic _id: 528c23e68ce7aa1e667734de, public_at: 2013-10-30 15:45:56 UTC>
Finished tests in 0.051755s, 38.6436 tests/s, 38.6436 assertions/s.
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips