Вы можете сгенерировать ваше случайное число и проверить, что оно еще не сохранено:
function getNumber(callback){
var n = Math.floor(Math.random()*1000000000);
YourModel.findOne({'number': n}, function(err, result){
if (err) callback(err);
else if (result) return getNumber(callback);
else callback(null, n);
});
}
getNumber(function(error, number){
console.log(number);
});
Если вы считаете, что этот процесс может быть вызван несколько раз параллельно, вам следует выполнить некоторые дополнительные проверки:
var alreadyRuning = false;
function getNumber(callback){
if (alreadyRuning) return setTimeout(function(){
getNumber(callback);
}, 10);
alreadyRuning = true;
var n = Math.floor(Math.random()*1000000000);
YourModel.findOne({'number': n}, function(err, result){
if (err) callback(err);
else {
alreadyRuning = false;
if (result) return getNumber(callback);
else callback(null, n);
}
});
}
getNumber(function(error, number){
console.log(number);
//...
YourModel.insert({'number': n}, function(err, result){
if (!err) alreadyRuning = false
});
});