首页 > 解决方案 > 使用 Mongoose 动态更新子文档中的数组

问题描述

我需要更新子文档中的数组字段并且有效

User.findOne({ _id: id }, (err, user) => {
    if (!user) res.json({ error: "Email has not be found" });
    user.set({ "files.0.approved": isApproved });
    user.save((err, updatedUser) => {
      return res.send(updatedUser);
    });
 });

不过,我想知道如何使它变得动态?因为在这里我手动传递索引 - files.0.approved

我尝试使用模板字符串,但它抱怨。

我也尝试过参考here,但无法弄清楚。

如果我们假设我可以得到数组的索引req.body.index,如何防止它被硬编码?

标签: node.jsdatabasemongodbmongoosenosql

解决方案


我设法做到了这一点。

 User.findOneAndUpdate(
    { _id: id, "files._id": file_id },
    { $set: { "files.$.approved": isApproved } },
    (err, updatedUser) => {
      if (err) res.json({ error: "Something went wrong" });
      res.json({ message: "success" });
    }
  );

显然,您最初找到了需要更新的文件,然后 mongoose 具有$指向已找到的索引的运算符。


推荐阅读