Управление изменениями схемы с MongoDB - PullRequest
0 голосов
/ 28 февраля 2020

Как обработать, если структура документа после производства изменится.

Предположим, у меня было 500 таких документов:

{
name: ‘n1’
height: ‘h1’
}

Позже, если я решу добавить все документы в следующем формате:

{
name: ‘n501’
height: ‘h501’
weight: ‘w501’
}

Я использую cursor.All(&userDetails) для декодирования (десериализации) в Go, чтобы получить выходные данные запроса в структуре userDetails. Если я изменю структуру дальнейших документов и userDetails соответственно, произойдет сбой для первых 500 документов?

Как обработать это изменение?

1 Ответ

1 голос
/ 28 февраля 2020

Если вы добавите новое поле в структуру, запрос к старым документам не завершится неудачей. Поскольку в старых документах нет нового поля, сохраненного в MongoDB, запрос к ним даст вам структурные значения, где новое поле будет иметь нулевое значение . Например, если его тип string, это будет пустая строка "", если это поле int, оно будет 0.

Если вас беспокоит, что старые документы не Если у вас есть это новое поле, вы можете расширить их в консоли mon go следующим образом:

db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } )

Эта команда добавляет новое поле weight к старым документам, где это поле не существовало, устанавливая их в пустая строка.

...