繁体   English   中英

无法 model。找到我刚刚保存到 mongoose 中的文档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM