#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