Я знаю, что это старый вопрос, но я опубликую свой ответ для потомков ...
Это зависит от системы, которую вы строите, и от конкретных бизнес-правил на месте.
Я создаю CRM среднего и крупного масштаба в MongoDb, C # (Backend API) и Angular (веб-приложение Frontend) и обнаружил, что ObjectId крайне ужасен для использования в угловой маршрутизации для выбора определенных объектов.То же самое с маршрутизацией 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 записи из коллекции, вы получите коллизии.
Мои бизнес-правила гласят, что из-за наших внутренних соглашений об уровне обслуживания нам не разрешается удалять данные корреспонденции или записи клиентов дольше, чем потенциальная продолжительность жизни приложения, которое я пишу, и поэтому я просто отмечаю записис перечислением «Status», которое является «Active» или «Deleted».Вы можете удалить что-то из пользовательского интерфейса, и он скажет «Контакт был удален», но все, что приложение сделало, это изменило статус контакта на «Удален», и когда приложение вызывает репозиторий для списка контактов, я фильтруюудалить удаленные записи перед отправкой данных в клиентское приложение.
Следовательно, db.collection.find (). Count () + 1 - идеальное решение для меня ...
Это не будет работать для всех, но если вы не будетеудаляя данные, все работает нормально.