-
Type: Bug
-
Resolution: Done
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: BSON
-
None
I'm trying to update an object of MongoDB. I'm using Java Driver (Sync).
After a 'create' operation, the data is persisted as follows:
{ "_id" : ObjectId("5f2b7deb62798d1045a47313"), "name" : "John", "other_info" : { "images" : { "images" : [ { "id" : "1", "imgType" : "IDBACKIMAGE" }, { "id" : "2", "imgType" : "SIGCARDIMAGE" } ] }, }, "status" : "PENDING" }
Now, I want to modify the 'id' parameter of the images array. So I update the data using getCollection().updateOne(filterCondition, combine(updateData)), but it is persisted as below:
{ "_id" : ObjectId("5f2b7deb62798d1045a47313"), "name" : "John", "other_info" : { "images" : { "images" : [ { "_id" : "3", "imgType" : "IDBACKIMAGE" }, { "_id" : "4", "imgType" : "SIGCARDIMAGE" } ] }, }, "status" : "PENDING" }
As you can see in the updated data, the 'id' property of the images array is now '_id' after update operation. I had provided the JSON with 'id' field but somehow the Mongo Client considered 'id' as '_id' and persisted '_id'. This happens when replaceOne() is used too. This doesn't happen with the create operation as you can see above. Is this an expected behavior when update operation is done? Why is MongoDB treating 'id' and '_id' as same?