Как mon goose узнает, какие идентификаторы используются при назначении идентификатора новому документу? - PullRequest
0 голосов
/ 05 мая 2020

Я заметил, что когда я создаю новый экземпляр объекта модели в mon goose (экземпляры объектов модели называются документами), _id присваивается перед сохранением в базу данных. Поскольку создание нового документа не требует функции обратного вызова, я не думаю, что он взаимодействует с базой данных при создании нового документа. Итак, мой вопрос: как mon goose узнает, что он не использует идентификатор, который уже используется каким-то документом в базе данных. Также я заметил, что если сервер не перезапускает, _id просто увеличивается на 1 каждый раз, когда создается новый документ. я предполагаю, что случайное число генерируется каждый раз при запуске сервера и увеличивается на 1 для каждого созданного документа.

1 Ответ

1 голос
/ 06 мая 2020

Все драйверы MongoDB (также известные как клиентские библиотеки) будут генерировать идентификаторы объектов непосредственно на клиенте. Один из моих коллег Кен Алгер сделал полную запись здесь . По сути, драйвер генерирует идентификатор без привязки к серверу. Он использует комбинацию метки времени, случайного значения и счетчика, чтобы гарантировать уникальность всех идентификаторов объектов в данной коллекции.

Это функция базового драйвера, а не Mon goose. Вы можете переопределить создание этого значения, указав собственное значение _id для любого вставляемого документа. Единственное ограничение состоит в том, что, поскольку _id имеет уникальный индекс, применяемый автоматически, все вставленные идентификаторы должны быть уникальными, иначе вставка будет отклонена.

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