gpt4 book ai didi

node.js - Mongoose 将多个项目添加到数据库

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:09 26 4
gpt4 key购买 nike

这段代码有两个问题。1) 仅 beerObjects 的最后一个元素保存到数据库中。2) 最后一个元素 (n = beerObjects.length) 有 n 个重复项保存到数据库中。

function addBeersToDatabase(beerObjects) {
for (i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].beerId);
var currentBeer = beerObjects[i];

// check if beer is already in database
Beer.findOne({'beerId': currentBeer.beerId}, function(err, beer){
if (err) {
handleError(err);
}
if (beer) {
// beer is already in database
}
else {
// add new beer to database
console.log(currentBeer.beerId);
var newBeer = new Beer();
newBeer.beerId = currentBeer.beerId;
newBeer.name = currentBeer.name;
newBeer.description = currentBeer.description;
newBeer.abv = currentBeer.abv;
newBeer.image = currentBeer.image;

newBeer.save(function(err) {
if (err) {
throw err;
}
});
}
});
}

}

我想循环遍历每种啤酒并将其信息保存到数据库中。我使用 findOne 来防止重复,但这不起作用。第一个 console.log() 语句打印每个啤酒 id,但第二个 console.log() 语句仅多次打印最后一个啤酒 id。

最佳答案

这里的问题是,在 findOne 回调中 - 您的 beerId 将始终设置为 beerObjects 中的最后一瓶啤酒,因为循环在您到达第一个回调之前完成 - 欢迎使用异步 JavaScript。

解决此问题的一种方法是将您的 findOne 代码包装在 IFFE(立即调用函数表达式)中。此代码将在从 beerObject 继续处理下一种啤酒之前完成。

以下是有关 IFFE 的更多信息

Stack Overflow on IFFE

我快速浏览了代码,我相信这应该可行,但您可能需要对内部代码进行一些调整...

for(var i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].beerId);
//var currentBeer = beerObjects[i]; dont need this now
(function (currentBeer) {
Beer.findOne({ beerId: currentBeer},
function(err, beer) {
if(!err && !beer) {
var newBeer = new Beer();
newBeer.beerId = currentBeer.beerId;
newBeer.name = currentBeer.name;
newBeer.description = currentBeer.description;
newBeer.abv = currentBeer.abv;
newBeer.image = currentBeer.image;
newBeer.save(function(err) {
// log your error here...
});
} else if(!err) {
console.log("Beer is in the system");
} else {
console.log("ERROR: " + err);
}
}
);
})(beerObjects[i].beerId);
}

关于node.js - Mongoose 将多个项目添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36506718/

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