更新嵌套数组中的嵌套数组

Update a nested array in a nested array

提问人:Vaodi 提问时间:1/17/2023 更新时间:1/30/2023 访问量:61

问:

我正在尝试使用此路线进行更新。


router.put("/:id", async(req,res)=>{

  try {
   const updateUser = await User.findByIdAndUpdate(req.params.id, {
      
        $push: {
          clients:{ 
          client_name: req.body.client_name,
          client_Username: req.body.client_Username,
          client_Password: req.body.client_Password,
          documents : [ 
           {
            name : req.body.docName,
            descritption : req.body.docDescription,
            doc_upload : req.body.doc_upload,
          }
        ]
    }
        }

        },{new:true})
        res.status(200).json(updateUser);
      }
     catch(err) {
      res.status(500).json(err);
    }
  });

一旦函数找到 id,它就会毫无问题地更新 client_name、client_Username 和 client_password。

我的问题是当我尝试使用名称/描述和doc_upload更新嵌套数组文档时。我做不到。

怎么了?请问怎么做?

JavaScript node.js MongoDB 嵌套列表

评论

0赞 Joe 1/17/2023
你试过arrayFilters吗?
0赞 heyitsjhu 1/17/2023
您目前得到了什么,阵列的预期结果是什么?现在,您正在创建一个新数组,每次都包含一个对象,其中包含 、 和 属性,其值为 。documentsnamedescriptiondoc_uploadreq.body

答:

0赞 lpizzinidev 1/17/2023 #1

一种解决方案可能是将更新分开:

router.put('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const { client_name, client_Username, client_Password } = req.body;
    const updateUser = await User.findByIdAndUpdate(
      id,
      {
        $push: {
          clients: {
            client_name,
            client_Username,
            client_Password,
          },
        },
      },
      { new: true }
    );
    await User.findOneAndUpdate(
      {
        id,
        'clients.client_name': client_name,
        'clients.client_Username': client_Username,
      },
      {
        $push: {
          'clients.$.documents': {
            name: req.body.docName,
            descritption: req.body.docDescription,
            doc_upload: req.body.doc_upload,
          },
        },
      }
    );
    res.status(200).json(updateUser);
  } catch (err) {
    res.status(500).json(err);
  }
});