[英]Can not model.find the documents I have just saved into my mongoose
这就是我现在正在经历的事情:我正在将一些值插入到名为 fruits 的 collections 中,并且在完成后我想用 map 对它们中的每一个进行控制台记录,第一次尝试控制台输出而不是一个水果(单个集合对象)所有水果(模型或集合)object,但是当我再次运行相同的代码时(以便我再次向集合水果添加相同的值)控制台显示之前已插入的水果对象,然后再显示更多水果(型号或系列)object。 我该怎么做才能使用我刚刚插入到我的收藏中的文档? 这是代码:
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);
});
}
}));
问题是save()
方法是异步的。 您不能在一行更新数据库并假设它已在下一行更改。 您可能会记录未更改的文档。
您可以尝试使用Array#map()
获取一组承诺,并等待使用Promise.all()
并行保存所有文档。 保存所有文档后,您可以 go 并使用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) {
// ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.