Mongodb 猫鼬缩短时间的原因是;findById“;及";。“保存”;

Mongodb 猫鼬缩短时间的原因是;findById“;及";。“保存”;,mongodb,express,mongoose,base64,compression,Mongodb,Express,Mongoose,Base64,Compression,我使用此方法编辑mongodb atlas数据库中的项目: router.post("/edit", upload.single("image"), (req, res, next) => { console.log("edit call: " + Date.now()); Schema.findById(req.body.editId, function (err, doc) { if (e

我使用此方法编辑mongodb atlas数据库中的项目:

router.post("/edit", upload.single("image"), (req, res, next) => {
    console.log("edit call: " + Date.now());


    Schema.findById(req.body.editId, function (err, doc) {

        if (err) {
            console.error('error, no entry found');
        }

        if (req.file.path) {
            console.log("before buffer create: " + Date.now());
            doc.image = new Buffer(fs.readFileSync(req.file.path)).toString("base64");
            console.log("after buffer create: " + Date.now());
        }
        
        doc.save((err) => {
                console.log("saved: " + Date.now());
                res.redirect('/admin');
            }
        );
    })


});


输出:(数据库中只有1个文档)

因此,我的结论是:

  • findById需要1秒的时间
  • 保存需要500毫秒(我已经看到了1500毫秒)

现在我想问一下,有没有办法减少这一时间。我担心如果数据库中有更多的项目,这将花费很多时间


节省时间是否取决于base64字符串长度(某些图片产生700k个字符串)?

实际上,最好将图像存储在某些存储器中,并将该图像的URL放入MongoDB,而不是将实际图像放入MongoDB

但是,如果要继续使用这种方法,可以使用
findbyidanddupdate
在一次调用中更新文档,而不是使用
findById
获取文档并使用
save()
保存


尝试使用MongoDB的数据库评测来获取更多关于它正在做什么的详细信息。
edit call:            1622842404818
before buffer create: 1622842405819
after buffer create:  1622842405822
saved:                1622842406382
router.post("/edit", upload.single("image"), async (req, res, next) => {
  try {
    await Schema.findByIdAndUpdate(req.body.editId, {
      image = new Buffer(fs.readFileSync(req.file.path)).toString("base64")
    });
    console.log("saved: " + Date.now());
    res.redirect('/admin');
  } catch (error) {
    res.status(400).json({ success: false, error })
  }
});