BSON :: ObjectId против Монго :: ObjectID - PullRequest
3 голосов
/ 22 февраля 2012

В онлайн API они относятся к Mongo::ObjectID.

У меня есть require 'mongo', но рубин все равно не может его найти. Например, мне нужно найти объект по его идентификатору, и я делаю:

mongo_db['post'].find({_id: Mongo::ObjectID(params[:id])}).next

и кажется, что он не может найти Mongo :: ObjectID и приводит к: NoMethodError - undefined method ``ObjectID' for Mongo:Module:

Так что через некоторое время я начал require 'bson' и делал

mongo_db['post'].find({_id: BSON::ObjectId(params[:id])}).next

и это сработало!

Так в чем же разница между BSON :: ObjectId и Mongo :: ObjectID и что мне нужно сделать, чтобы последний работал (и действительно ли мне это нужно)?

PS: у меня есть

bson (1.5.2, 1.4.1)
    Authors: Jim Menard, Mike Dirolf, Kyle Banker
    Homepage: http://www.mongodb.org
    Installed at (1.5.2): /usr/local/lib64/ruby/gems/1.9.1
                 (1.4.1): /usr/local/lib64/ruby/gems/1.9.1

    Ruby implementation of BSON

mongo (1.5.2, 1.4.1)
    Authors: Jim Menard, Mike Dirolf, Kyle Banker
    Homepage: http://www.mongodb.org
    Installed at (1.5.2): /usr/local/lib64/ruby/gems/1.9.1
                 (1.4.1): /usr/local/lib64/ruby/gems/1.9.1

    Ruby driver for the MongoDB

1 Ответ

2 голосов
/ 22 февраля 2012

В драйвере Ruby есть два изменения, которые актуальны здесь. Первый:

https://jira.mongodb.org/browse/RUBY-158

Это переместило ObjectID в версию ObjectId "случай верблюда". Переключение с пространства имен Mongo на пространство имен BSON произошло намного раньше (0.2), см. Последнюю запись в файле истории здесь:

https://github.com/mongodb/mongo-ruby-driver/blob/master/docs/HISTORY.md

Настоящая проблема, конечно же, в старой и жесткой документации, поэтому я отправил запрос на ее обновление:

https://github.com/mongodb/mongo-ruby-driver/pull/90

...