Я знаю, что это старый вопрос, но я отправлю свой ответ для потомков ...
Это зависит от системы, которую вы строите, и от конкретных бизнес-правил.
Я создаю CRM с умеренным и крупным масштабом в MongoDb, C # (Backend API) и Angular (веб-приложение Frontend) и обнаружил, что ObjectId совершенно ужасен для использования в Angular Routing для выбора определенных объектов. То же самое с маршрутизацией API-контроллера.
Это предложение отлично работало для моего проекта.
db.contacts.insert({
"id":db.contacts.find().Count()+1,
"name":"John Doe",
"emails":[
"john@doe.com",
"john.doe@business.com"
],
"phone":"555111322",
"status":"Active"
});
Причина, по которой это идеально подходит для моего случая, но не во всех случаях, так как выше комментарий, если вы удалите 3 записи из коллекции, вы получите столкновения.
В моих бизнес-правилах указано, что из-за наших внутренних SLA нам не разрешено удалять корреспонденционные данные или записи клиентов дольше, чем потенциальная продолжительность работы приложения, которое я пишу, и поэтому я просто отмечаю записи с перечислением «Статус», которое либо «Активно», либо «Удалено». Вы можете удалить что-то из пользовательского интерфейса, и он скажет: «Контакт удален», но все приложение выполнило изменение статуса контакта на «Удалено», и когда приложение вызывает репозиторий для списка контактов, я фильтрую а затем удалите записи, прежде чем вставлять данные в клиентское приложение.
Поэтому db.collection.find (). Count () + 1 - идеальное решение для меня ...
Это не сработает для всех, но если вы не удалять данные, он отлично работает.