[英]generate unique random number in mongoose db without repeat?
i want to generate a random number which should not be repeated based on the numbers from my mongoose db, i don't wanna use this for a unique number: 我想生成一个不应该根据我的猫鼬数据库中的数字重复的随机数,我不想将它用于一个唯一的数字:
Math.floor(Math.random()*1000000000)
i found this answer which is in php here 我在这里发现了这个答案
SELECT FLOOR(RAND() * 99999) AS random_num
FROM numbers_mst
WHERE "random_num" NOT IN (SELECT my_number FROM numbers_mst)
LIMIT 1
how can i do that but in mongoose? 我怎么能这样做,但在猫鼬?
You could generate your random number and check that it is not already stored: 您可以生成随机数并检查它是否已存储:
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);
});
If you think this process could be called more than once in parallel, you should do some additional checks: 如果您认为此进程可以多次并行调用,则应进行一些额外的检查:
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
});
});
I don't believe it is possible to do this on the database, like your SQL-example. 我不相信可以在数据库上执行此操作,就像您的SQL示例一样。 There is a ticket for adding a $rand operator to the aggregation pipeline, but that ticket is still unresolved:
有一个将$ rand运算符添加到聚合管道的票证,但该票证仍未解决:
https://jira.mongodb.org/browse/SERVER-30405 https://jira.mongodb.org/browse/SERVER-30405
Still, you could create a database-function (which can have a bad performance) and store it on the server: https://docs.mongodb.com/manual/tutorial/store-javascript-function-on-server/ 不过,您可以创建一个数据库函数(可能性能不佳)并将其存储在服务器上: https : //docs.mongodb.com/manual/tutorial/store-javascript-function-on-server/
That's not really a mongoose solution, though. 不过,这并不是一个真正的猫鼬解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.