Я пытаюсь обновить объект MongoDB. Я использую драйвер Java (Sync).
После операции создания данные сохраняются следующим образом:
Код: Выделить всё
{
"_id" : ObjectId("5f2b7deb62798d1045a47313"),
"name" : "John",
"other_info" : {
"images" : {
"images" : [
{
"id" : "1",
"imgType" : "IDBACKIMAGE"
},
{
"id" : "2",
"imgType" : "SIGCARDIMAGE"
}
]
},
},
"status" : "PENDING"
}
Теперь я хочу изменить параметр «id» массива изображений. Поэтому я обновляю данные с помощью getCollection().updateOne(filterCondition, join(updateData)), но они сохраняются, как показано ниже:
Код: Выделить всё
{
"_id" : ObjectId("5f2b7deb62798d1045a47313"),
"name" : "John",
"other_info" : {
"images" : {
"images" : [
{
"_id" : "3",
"imgType" : "IDBACKIMAGE"
},
{
"_id" : "4",
"imgType" : "SIGCARDIMAGE"
}
]
},
},
"status" : "PENDING"
}
Как видно из обновленных данных, после операции обновления свойство id массива изображений теперь имеет значение _id. Я предоставил JSON поле «id», но каким-то образом клиент Mongo посчитал «id» как «_id» и сохранил «_id». Это происходит, когда используется replaceOne(). Как вы можете видеть выше, этого не происходит при операции создания. Ожидается ли это поведение после завершения операции обновления? Почему MongoDB рассматривает «id» и «_id» как одно и то же?
Подробнее здесь:
https://stackoverflow.com/questions/633 ... of-mongodb