Сортировать все после идентификатора - PullRequest
0 голосов
/ 25 января 2019

У меня есть таблица MongoDB с, скажем, миллиардом записей.Каждая запись имеет числовой индекс, для которого установлено значение auto_increment.
Однажды я решил удалить некоторые записи в середине базы данных (см. _Id: 18).

{ "_id" : 16, "email" : "LcZL4E43gd", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 17, "email" : "YQo4SKEslh", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 19, "email" : "tVlsT6yZxv", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 20, "email" : "xoMF4dt2Fn", "password" : "test", "lastseen" : 1548354920 }

Так что теперь счетчик уходит16, 17, 19, 20. Но мой Код должен остановиться на пустом неудачном запросе get.Так что это остановится в середине таблицы, потому что индекс отсутствует.
Как мне эффективно обновить каждый элемент _id, чтобы он соответствовал возрастающему индексу auto_increment?
Существует ли предопределенный метод, о котором я не знаю?

1 Ответ

0 голосов
/ 25 января 2019

Как эффективно обновить каждый элемент _id в соответствии с повышающим индексом auto_increment?

Вы не можете. Поле _id является неизменным в MongoDB. Как только значение было назначенный ему, вы не можете изменить его.

Если вы действительно хотите сделать что-то подобное (чего не следует делать), во-первых, вам нужно переместить ваш последовательный счетчик в другое поле (не _id). Но помните, что, как вы уже упоминали, если у вас есть один миллиард документов и ваш 18-й документ удален, вы хотите все остальные документы (1 миллиард - 18 !!!!!) будут обновлены?

Предложение: Лучше переопределить ваш API, чтобы принимать «дыры» в ваших последовательностях (например, если 18 не существует, двигаться дальше). Но, не зная всего сценария приложения, кому-либо трудно это предложить.

Более подробную информацию о _id поле можно получить здесь: https://www.vividcortex.com/blog/what-is-mongodbs-_id-field-and-how-to-use-it

...