MongoDB: Cannot canonicalize request: unknown BadValue statement

Data is given as follows:

{ "_id" : { "$oid" : "546b79a2e4b0f7bfbaa97cc7" }, "title" : "Eyewitness: Highlands, Scotland", "description" : "Photographs from the Guardian Eyewitness series", "timeStamp" : "14/11/2014", "category" : "news", "url" : "http://www.theguardian.com/world/picture/2014/nov/14/1", "source" : "http://www.theguardian.com/", "mainStory" : "\n", "keywords" : [ "Wildlife", "Scotland" ] } 

But when I use the following command to find something, the error goes out

 db.guardian.find({ "_id": {"$oid": '546b79a2e4b0f7bfbaa97cc7'}}) 

How to find a document with a specific $oid .

+6
source share
2 answers

You need to convert the id string to ObjectId as follows:

 db.guardian.find({ "_id": ObjectId("546b79a2e4b0f7bfbaa97cc7") }) 

The reason is that { "$oid" : "546b79a2e4b0f7bfbaa97cc7"} matches the ObjectId("546b79a2e4b0f7bfbaa97cc7") only in a different format.

See docs for more details.

+5
source

You can add below class methods to your model.

 def self.serialize_from_session(key, salt) (key = key.first) if key.kind_of? Array (key = BSON::ObjectId.from_string(key['$oid'])) if key.kind_of? Hash record = to_adapter.get(key) record if record && record.authenticatable_salt == salt end def self.serialize_into_session(record) [record.id.to_s, record.authenticatable_salt] end 
+1
source

Source: https://habr.com/ru/post/988516/


All Articles