Я собираюсь по всему миру искать решение моей проблемы. Я использую Mongoid для записи набора данных в MongoDB.Монгоидная пакетная вставка со сложной схемой?
Я пытаюсь сделать пакетное вставку с Mongoid следующим образом:
class Geonode
include Mongoid::Document
include Mongoid::Timestamps
embeds_one :location
embeds_one :transport
end
class Location
include Mongoid::Document
field :city, :type => String
embedded_in :geonode
end
class Transport
include Mongoid::Document
embeds_many :trainstation
embedded_in :geonode
end
class Trainstation
include Mongoid::Document
field :station, :type => String
belongs_to :transport
end
И это прекрасно работает, чтобы сделать это один за другим, но если я хочу, чтобы партия их много, то, что я делать?
Я пробовал.
require 'moped'
require 'rubygems'
require 'mongo'
require 'mongoid'
require 'skySchema.rb' #schema is the file i defined the classes just before
Mongoid.load!("./mongoid.yml", :development)
include Mongo
batch = []
batch << {:location => Location.new(:city => "London"),
:transport => Transport.new(:trainstation =>
[Trainstation.new(:station => "Kings Cross")])}}
and then doing this many many times, after which
Geonode.collection.insert(batch)
но это не сработает. Я делаю что-то неправильно?
«не работает» означает что? вы получаете сообщение об ошибке? добавляется только первый? что-то другое? –
Объект не вставлен, он просто падает. И мне интересно, нужно ли мне что-то определять? Ничего не происходит, я получаю следующее сообщение об ошибке: .rvm/gems/ruby-1.9.3-p429/gems/mongoid-3.1.4/lib/mongoid/attributes.rb: 320: in 'method_missing ': undefined method '__bson_dump__ 'для # (NoMethodError) –
inquire
какая версия Mongoid это? Драйвер MongoDB не всегда поддерживал синтаксис пакетной вставки, поэтому, возможно, это версия, основанная на старой версии Ruby Driver? –