Как не использовать ObjectId () в узле mon go native - PullRequest
0 голосов
/ 18 февраля 2020

Поскольку _id передаются взад и вперед через вызовы REST API и другие вещи, которые делают их необходимыми для обработки в виде строк, это может раздражать и приводить к ошибкам, когда при запросе их оборачивают в ObjectIds или использование в качестве внешних ключей в документах mongodb.

Я бы предпочел использовать строки uuid (используя пакет npm uuid).

Есть ли способ изменить узел mongodb на использование идентификаторов на основе строк по умолчанию при вставке нового объекта, и возможно также использовать функцию генератора uuid, которую я указываю?

1 Ответ

0 голосов
/ 18 февраля 2020

Поле _id MongoDB может иметь любое значение, которое вы хотите, если вы можете гарантировать, что оно уникально для коллекции. Если у ваших данных уже есть естественный ключ, нет причины не использовать его вместо автоматически сгенерированных ObjectID.

Не используя ObjectID, вы также упускаете другую удобную функцию: ObjectID также включает в себя unix отметка времени, когда она была сгенерирована, и многие драйверы предоставляют функцию для ее извлечения и преобразования в дату. Иногда это может сделать отдельное поле даты создания избыточным.

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

db.collection.createIndex( <key and index type specification>, { unique: true } )

Один пример:

db.employees.createIndex( { "uuid": 1 }, { unique: true } )
...