id 被内部对象的 _id 替换

问题描述 投票:0回答:1

我正在尝试更新 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”视为相同?

java database mongodb mongodb-java
1个回答
0
投票

可以使用@Field注解来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.