首页 > 解决方案 > 如何使用 mongoose 更新 mongodb 中的值?

问题描述

我在 node js 中做了一个简单的 MongoDB 演示。

首先我保存我document这样的工作正常。

{
"_id": "5d984cf947cd7301dab539be",
"tmObj": {
"a1": "N",
"a2": "N",
"a3": "N"
},
"__v": 0
}

现在我想更新一个attribute from my collection

示例数据是

const data = {
      a1: "Y"
    };

这是我的代码

https://codesandbox.io/s/objective-minsky-bqeil

app.get("/saveData", async (req, res, next) => {
  try {
    const data = {
      tmObj: {
        a1: "N",
        a2: "N",
        a3: "N"
      }
    };
    console.log("before save");
    let blog = new BlogPostModel(data);
    let saveBlog = await blog.save(data); //when fail its goes to catch
    return res.send(saveBlog);
  } catch (error) {
    console.log(error);
    return res.status(400).send(error);
  }
});

app.get("/update", async (req, res) => {
  try {
    const data = {
      a1: "Y"
    };
    let filterBlog = await BlogPostModel.find({});
    //when fail its goes to catch
    console.log(filterBlog); //when success it print.
    res.send(filterBlog);
  } catch (error) {
    console.log(error);
  }
});

任何更新?

标签: javascriptnode.jsmongodbmongoose

解决方案


这是答案代码和

正如您在评论中提到的那样,集合中只有一个文档,然后您可以使用空查询。要更新并取回文档,您可以使用findOneAndUpdate

app.get("/update", async (req, res) => {
  try {
    const data = {
      a1: "Y"
    };
    let filterBlog = await BlogPostModel.findOneAndUpdate(
      {},
      { "tmObj.a1": data.a1 }
    );
    //when fail its goes to catch
    console.log(filterBlog); //when success it print.
    res.send(filterBlog);
  } catch (error) {
    console.log(error);
  }
});

为避免弃用警告,您应该{ useFindAndModify: false }mongoose.connect.


推荐阅读