Драйвер Ruby Mongo — Find_by_Id

#ruby #ruby-on-rails-3 #mongodb

#ruby #ruby-on-rails-3 #mongodb

Вопрос:

Что я здесь делаю не так? Я знаю, что _id находится в базе данных, но я получаю пустой результат.

 @b = coll.find("_id" => "4db2ebee90036f010b000001")
  

Спасибо

Комментарии:

1. возвращает ли он что-нибудь, если вы выполняете то же самое вручную в db?

2. @Vlad, я использую MongoHQ и на самом деле, когда я ищу {_id: «4db2ebee90036f010b000001»}, я не получаю результатов. Однако я не понимаю, почему. Строка есть.

Ответ №1:

Используйте это:

 coll.find(:_id => BSON::ObjectId('4db2ebee90036f010b000001')).each do |data| 
   puts data.inspect 
end
  

Ответ №2:

@b будет содержать курсор, а не результат. Вам также необходимо использовать соответствующий идентификатор объекта.

Вы, вероятно, хотите этого:

 @b = coll.find_one(:_id => BSON::ObjectId('4db2ebee90036f010b000001'))
  

Ответ №3:

С Ruby 1.9.3 и mongoid 3.0.19

 @coll = Coll.find( hash["_id"] )
  

или

 @coll = Coll.find( "511296d2dfa18f07fa000009" )
  

найдите запись. Всегда будет только один, _id — это первичный ключ, он никогда не может быть двойным.

Ответ №4:

Я бы использовал что-то вроде first , которое возвращает объект, поскольку у вас возникают большие проблемы, если ваш основной идентификатор дублируется в вашей базе данных. Синтаксис зависит от вашей версии mongo gem, эта версия предназначена для 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
  

Ответ №5:

Использование 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