我正在尝试更新 MongoDB 的一个对象。我正在使用 Java 驱动程序(同步)。
“创建”操作后,数据将按如下方式持久保存:
{
"_id" : ObjectId("5f2b7deb62798d1045a47313"),
"name" : "John",
"other_info" : {
"images" : {
"images" : [
{
"id" : "1",
"imgType" : "IDBACKIMAGE"
},
{
"id" : "2",
"imgType" : "SIGCARDIMAGE"
}
]
},
},
"status" : "PENDING"
}
现在,我想修改图像数组的“id”参数。所以我使用
getCollection().updateOne(filterCondition, combine(updateData))
更新数据,但它被保留如下:
{
"_id" : ObjectId("5f2b7deb62798d1045a47313"),
"name" : "John",
"other_info" : {
"images" : {
"images" : [
{
"_id" : "3",
"imgType" : "IDBACKIMAGE"
},
{
"_id" : "4",
"imgType" : "SIGCARDIMAGE"
}
]
},
},
"status" : "PENDING"
}
正如您在更新的数据中看到的,更新操作后,图像数组的“id”属性现在为“_id”。我已经提供了带有“id”字段的 JSON,但不知何故 Mongo 客户端将“id”视为“_id”并保留了“_id”。当使用
replaceOne()
时也会发生这种情况。正如您在上面看到的,创建操作不会发生这种情况。更新操作完成后这是预期的行为吗?为什么 MongoDB 将“id”和“_id”视为相同?
可以使用@Field注解来解决这个问题。