Как обновить ключ шарда в коллекции mongodb - PullRequest
0 голосов
/ 16 января 2020

Требуется обновить значение одного поля всех документов. К сожалению, это поле является ключом для этой коллекции. Например, документы в коллекции выглядят следующим образом:

{
    "_id" : ObjectId("5c0763afaabfc3000eb44cc0ss"),
    "sensorId" : "someid",
    "liftId" : "some-lift-id", //Shared key
    "startTimestamp" : NumberLong(1543988140912),
    "endTimestamp" : NumberLong(0),
    "value" : {}
}

Я хочу обновить значение liftId до нового значения (новое значение >> prefix-some-lift-id) во всех документах.

Это то, что я пробовал,

db.getCollection('lift_events').find({}).forEach(
    function (elem) {
        db.getCollection('lift_events').update(
            {
                _id: elem._id
            },
            {
                $set: {
                    liftId: 'prefix-' + elem.liftId 
                }
            }
        );
    }
);

Но это не удалось, потому что liftId является ключом шарда для коллекции. Есть ли способ добиться этого для всех шардов без указания ключа шарда?

db.version() : 3.4.6, и это API-интерфейс Cosmos DB для MongoDB Azure для *

1 Ответ

0 голосов
/ 16 января 2020

Изменение ключа шарда возможно только

  • , если вы используете MongoDB версии 4.2
  • Ключ шардинга не является уникальным ключом _id документа

Чтобы изменить ключ Shard, вам необходимо выполнить следующие шаги

В MongoDB отсутствует автоматическая поддержка c для выбора другого ключа Shard после шардинга коллекции. Эта реальность подчеркивает важность выбора хорошего шарда. Если вам необходимо изменить ключ шарда после шардинга коллекции, лучшим вариантом будет:

  • Сбросить все данные из MongoDB во внешний формат.
  • Удалите оригинальную коллекцию осколков.
  • Сконфигурируйте разделение с помощью более идеального ключа шарда.
  • Предварительно разделите диапазон ключа шарда, чтобы обеспечить начальное равномерное распределение.
  • Восстановление выгруженных данных в MongoDB.

В этом случае "liftId" : "some-lift-id" не является уникальным ключом _id, и если вы используете MongoDB версии 4.2, вы можете изменить свой заштрихованный ключ, выполнив шаги, описанные выше

Но хорошей практикой всегда является выбор хорошего ключа шардинга, разделенного подчеркиванием, прежде чем делать шардинг.

Ссылки

Ключи шарда

Часто задаваемые вопросы по Sharding

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...