這就是我現在要做的事情:我正在將一些值插入一個名為 Fruits 的集合中,在它完成后我想用地圖控制臺.log 每個值,首先嘗試控制臺輸出而不是一個水果(單個集合)物件)所有的水果(模型或集合)物件,但是當我再次運行相同的代碼時(以便我再次向集合水果添加相同的值)控制臺顯示之前插入的水果物件,然后是更多的水果(模型或集合)物件。我該怎么做才能使用剛剛插入到我的收藏中的檔案?這是代碼:
const db = require("mongoose");
const url = "mongodb://localhost:27017/personasDB";
db.connect(url);
const fruitSchema = new db.Schema({
name:{
type: String,
required: true,
minlength: 3,
maxlength: 20
},
price:{
type: Number,
required:true,
min: 0,
max: 100
}
});
const Fruit = db.model("fruits", fruitSchema);
const fruits = ["pineapple", "apple", "banana", "orange"];
const prices = [12, 12.5, 4, 6.4];
for(let i = 0; i < fruits.length; i ){
const fruit = new Fruit({
name: fruits[i],
price: prices[i]
});
fruit.save();
}
console.log(Fruit.find({}, function(err, elements){
if(err){
console.log(err);
}else{
elements.map(fruit=>{
console.log(fruit);
});
}
}));
第一個日志
在我重新運行代碼后,我在第一次輸出后得到了我想要的
uj5u.com熱心網友回復:
問題在于該save()方法是異步的。你不能在一行更新你的資料庫,并假設它在下一行已經改變了。您可能會記錄未更改的檔案。
您可以嘗試使用Array#map()獲取一系列承諾并等待所有檔案使用Promise.all(). 保存所有檔案后,您可以去使用Fruit.find().
const fruits = ['pineapple', 'apple', 'banana', 'orange']
const prices = [12, 12.5, 4, 6.4]
let promises = fruits.map((fruitName, i) => {
const fruit = new Fruit({
name: fruitName,
price: prices[i],
})
return fruit.save()
})
// Make sure, you're using `await` in an `async` function!
await Promise.all(promises)
// all the fruits are saved in the db
console.log(
Fruit.find({}, function (err, elements) {
// ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/375261.html
標籤:javascript 节点.js 猫鼬
上一篇:如何在貓鼬中查找檔案?
