Превратите MongoDB _id в объект ObjectId с помощью Ruby для извлечения уникальной записи

#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.