Finnnn
Finnnn

Reputation: 3580

Compare string ID to BSON::ObjectId

I have an array of made up of type BSON::ObjectId and I want it to compare against some IDs as strings.

if my_array_of_BSON_ObjectIds.include?(@my_id_as_a_string)
   # delete the item from the array
else
   # add the item to the array as a BSON::ObjectId
end

This is not working as the types are different, can I turn my string into a BSON::ObjectId? If so, how?

Upvotes: 5

Views: 9692

Answers (4)

goldylucks
goldylucks

Reputation: 6144

There's a shorter way:

BSON::ObjectId("id_here")

but for your case it would be easier to simply map the objects to ids before the comparison:

if my_array_of_BSON_ObjectIds..map(&:to_s).include?(@my_id_as_a_string)

Upvotes: 0

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230521

Mongoid 2.x with 10gen's driver:

BSON::ObjectId.new('506144650ed4c08d84000001')

Mongoid 3 with moped:

Moped::BSON::ObjectId.from_string('506144650ed4c08d84000001')

Mongoid 4 (moped) / Mongoid 5/6/7 (mongo):

BSON::ObjectId.from_string('506144650ed4c08d84000001')

Upvotes: 14

peterateftawfik
peterateftawfik

Reputation: 57

collection.delete_one({"_id"=>BSON::ObjectId(params['id'])})

This worked for me and it deleted the record from the database successfully

Upvotes: 0

Andrei Subbota
Andrei Subbota

Reputation: 116

You can use BSON::ObjectId(@my_id_as_a_string) for representation your id as BSON::ObjectId

refs http://api.mongodb.org/ruby/current/BSON.html#ObjectId-class_method

Upvotes: 5

Related Questions