gpt4 book ai didi

node.js - Mongoose 独特的现场处理

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:13 24 4
gpt4 key购买 nike

我有一个问题,但在 Google 中尚未找到答案。它是关于 Mongoose 并保存具有唯一字段的对象。

例如,我有一个模型,我们将其称为“产品”。它应该有一个唯一的数字ID,假设字段的名称是productId。现在我只是生成随机 16 位数字:

var id = (Math.random()+' ').substring(2,10)+(Math.random()+' ').substring(2,10);

然后创建产品:

var product = { productId: id }
Product.create(product, (err, product) => { rest goes here });

所以实际的问题是:我如何检查具有此 id 的产品是否已经存在,如果确实存在,则根据需要多次重新生成 id,直到没有具有此产品 ID 的产品,然后才创建它。

在架构中,我将 ProductId 定义为唯一字段。我想我必须对错误处理做一些事情,但我只是找不到具体的内容。

最佳答案

默认情况下,MongoDb 会为您创建一个唯一的对象 id,即使您懒得尝试创建 id。由于您还为产品创建了随机 ID,因此我的建议是您无需担心创建唯一 ID。

但是如果你真的坚持创建一个唯一的id,如果你添加唯一的属性,使用mongoose,此时如果有人试图添加一个不唯一的id,它会自动抛出一个错误。所以你不需要担心验证 Mongoose 默认处理它。

至于你查找用户的问题是否已经存在用户

如果再次尝试重新创建唯一 ID,则存在迭代时间未知的问题,它将在最坏的情况下运行。因此,考虑到最坏的情况会发生什么,假设它迭代超过 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());
}
});
}

在这里,您将创建一个迭代计数未知的循环..所以您确实需要注意它..但至于您的问题,这就是方式

关于node.js - Mongoose 独特的现场处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com