#ruby-on-rails #ruby #mongodb #sinatra #nosql
#ruby-on-rails #ruby #mongodb #sinatra #nosql
Вопрос:
Я пытаюсь извлечь документ, хранящийся в MongoDB, используя его _id стандартного типа ObjectId. У меня _id представлен в виде строки. В этом примере это «4ec064e406a6f1205a000001»
Итак, я делаю:
require 'mongo'
connection = Mongo::Connection.new("localhost", 27017).db("store")
collection = connection.collection("products")
id = '4ec064e406a6f1205a000001'
# What should the following line be? This doesn't work.
collection.find_one("_id" => Mongo::ObjectID.from_string(id))
Я понимаю, что это BSON ObjectId, и я попробовал несколько разных способов использования bson gem для генерации нужного объекта, но я не могу заставить его работать. Я также попытался изменить _id одного из объектов на стандартный Int32, используя аналогичный код, и это сработало нормально. Я не знаю, как создать правильный объект ObjectId для использования с этим запросом.
Спасибо!
Ответ №1:
Вот правильный синтаксис для преобразования строки в ObjectId BSON:
collection.find_one({:_id => BSON::ObjectId("4ec064e406a6f1205a000001")})
Комментарии:
1. Я понимаю, что это было пару лет назад, но, к вашему сведению, find_one больше не является методом в Mongo::Collection. Единственное, что у меня сработало, это find(<критерии>).first. Используя mongo (2.3.0) в Gemlock.