Reputation: 3580
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
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
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
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
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