Mongoose 在 db 中创建了一个新文档,但不会在生产中获取更新的集合

问题描述

我有一个 MERN-stack 应用程序,在服务器端,我为数据库创建了一个新文档并且它工作正常(我在 Mongocompass 中检查它)。但是,在获取此数据时,即使它出现在数据库中,我也没有获得带有响应的新保存文档。例如,我在db中有[1,2,3],我新建了一个文档,4。实际的DB是[1,3,4],但是取的时候是[1,3] .

问题是,这个问题只发生在生产环境中,我在 Dreamhost 的共享托管服务中托管我的服务器。在本地主机上一切正常,甚至在 Heroku 中也能正常工作。

我主机上的 Node.js 版本:12.18.3 我机器上的 Node.js 版本:14.15.3 猫鼬版本:5.12.7

这是我的代码: 创建一个新文档:

router.post('/upload',async(req,res) => {
    const path = `${__dirname}/../static`
    const file = req.files.file;

    const newProduct = new Product({
        ...req.body,imageSrc: `${file.name}`,cardDetails: req.body.description,})
    
    let error = false
    file.mv(`${path}/${file.name}`,err => {
      if (err) {
        console.log('error downloading');
        console.error(err);
        error = err
      }
    });
    if(error) {
        return res.status(500).send(error)
    };

    try{
        await newProduct.save()
        await Category.findOneAndUpdate({title: req.body.category},{
            $addToSet: {products: newProduct._id} 
        })
    } catch(err){
        if (err) return res.json({message: err})
    }

    res.json({ fileName: file.name,filePath: `/uploads/${file.name}`,message: 'Done' });
});

获取产品:

router.get('/',res) => {
    const response = await Product.find({})
    res.send(response)
})

我注意到只有在从数据库删除文档后它才会更新并获取最新的集合,删除函数是:

router.delete('/',res) => {
    const { _id,category } = req.body
    const prod = await Product.findById(_id)
    await Product.findByIdAndDelete(_id)
    await Category.findOneAndUpdate(
        {title: category},{$pull: { products: mongoose.Types.ObjectId(_id)}}
    )
    res.send({status: 'ok'})
})

问题已解决:原来问题不在于猫鼬,而在于浏览器缓存。在这个问题的帮助下修复: No cache in Node.js server。 尽管如此,我还是不明白为什么在 Heroku 和本地主机中部署时都没有缓存。

解决方法

可用选项

new: bool - 如果为 true,则返回修改后的文档而不是原始文档。默认为 false(在 4.0 中更改)

解决方案 传递 {new: true} 如果你想在 doc 变量中更新结果