Ответ 1
Используйте это:
coll.find(:_id => BSON::ObjectId('4db2ebee90036f010b000001')).each do |data|
puts data.inspect
end
Что я здесь делаю неправильно? Я знаю, что _id находится в базе данных, но я получаю пустой результат.
@b = coll.find("_id" => "4db2ebee90036f010b000001")
Спасибо
Используйте это:
coll.find(:_id => BSON::ObjectId('4db2ebee90036f010b000001')).each do |data|
puts data.inspect
end
@b будет содержать курсор, а не результат. Вам также необходимо использовать собственный идентификатор объекта.
Вероятно, вы хотите:
@b = coll.find_one(:_id => BSON::ObjectId('4db2ebee90036f010b000001'))
С Ruby 1.9.3 и mongoid 3.0.19
@coll = Coll.find( hash["_id"] )
или
@coll = Coll.find( "511296d2dfa18f07fa000009" )
найдите запись. Будет только один, _id является первичным ключом, он никогда не может быть двойным.
Я бы использовал нечто вроде first
, которое возвращает объект, так как у вас большие проблемы, если ваш основной идентификатор дублируется в вашей базе данных. Синтаксис зависит от версии вашего монго-гема, для которой он равен 2.1.0.
your_id = '4db2ebee90036f010b000001'
db = Client.new([ "localhost:27017" ], :database => "db")
coll = db[:testCollection]
res = coll.find(:_id => BSON::ObjectId(your_id)).first
Использование Ruby версии 2.3.1p112, mongo (gem) 2.4.2 и BSON (gem) 4.2.2
Следующие работали для меня
client = Mongo::Client.new(['127.0.0.1:3001'], :database=>'dbname')
collection = client[:users]
user = collection.find({_id:'XY3h5R7aJkh5FxFhJ'}).first