BSON :: ObjectId vs Mongo :: ObjectID
Frage
In Online-API beziehen sie sich auf Mongo::ObjectID
.
Ich habe require 'mongo'
, aber Ruby findet ihn immer noch nicht.Zum Beispiel muss ich ein Objekt anhand seiner ID finden und mache Folgendes:
mongo_db['post'].find({_id: Mongo::ObjectID(params[:id])}).next
und es scheint, dass es Mongo :: ObjectID nicht finden kann und führt zu: NoMethodError - undefined method ``ObjectID' for Mongo:Module:
Nach einiger Zeit begann ich, Code zu generieren und zu tun
mongo_db['post'].find({_id: BSON::ObjectId(params[:id])}).next
und es hat funktioniert!
Was ist also der Unterschied zwischen BSON :: ObjectId und Mongo :: ObjectID und was muss ich tun, damit letzteres funktioniert (und muss ich es wirklich tun)?
PS: Ich habe
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
Lösung
Hier sind zwei Änderungen am Ruby-Treiber relevant.Der erste ist:
https://jira.mongodb.org/browse/RUBY-158
Dadurch wurde die ObjectID in die ObjectId-Version "camel case" verschoben.Der Wechsel vom Mongo-Namespace zum BSON-Namespace erfolgte viel früher (0.2). Den letzten Eintrag in der Verlaufsdatei finden Sie hier:
https://github.com/mongodb/mongo-ruby-driver / blob / master / docs / HISTORY.md
Das eigentliche Problem ist natürlich die alte und mürrische Dokumentation, daher habe ich eine Pull-Anfrage zum Aktualisieren eingereicht: