MongoDb создает уникальный идентификатор объекта для вас по умолчанию, даже если вы не пытаетесь создать идентификатор. Поскольку вы также создаете случайный идентификатор для продукта, я рекомендую вам не беспокоиться о создании уникального идентификатора.
но если вы действительно настаиваете на создании уникального идентификатора, используя mongoose, если добавляете уникальный атрибут, в тот момент, когда кто-то пытается добавить не уникальный идентификатор, он автоматически выдаст ошибку. Так что вам не нужно беспокоиться о проверке этого, мангуст обрабатывает его по умолчанию.
что касается вашей проблемы с поиском пользователя, существует ли пользователь уже
если существует попытка повторного создания уникального идентификатора, то возникает проблема неизвестного времени итераций, которая будет выполняться в худшем случае.
так что, учитывая, что произойдет, если наихудший случай, скажем, если он повторяется более 100 раз ..
(говоря математически - с точки зрения вероятности это 100-кратное значение итерации может быть не истинным, а как в примере).
Так что, если вы хотите воспользоваться этим шансом и в любом случае пойти дальше, вы можете сделать это следующим образом
function genId(){
return (Math.random()+' ').substring(2,10)+(Math.random()+' ').substring(2,10);
}
recreateOrInsert(genId());
function recreateOrInsert(id){
Product.find({productId:id},(err,data)=>{
if(err)throw err;
if(data.length==0){ //remember here data comes as an array
var product = { productId: id };
Product.create(product, (err, product) => { rest goes here });
}else{
recreateOrInsert(genId());
}
});
}
Здесь вы создадите цикл, число итераций которого неизвестно .. поэтому вам действительно нужно следить за ним ... но что касается вашего вопроса, то это путь