首页 > 解决方案 > 如何在嵌套对象中发送新添加的项目作为响应

问题描述

我的 mongodb 中有一个名为 User 的集合,例如您可以在下面的已保存用户示例中看到

{
  _id: new ObjectId("61488f3892099143ca2b2bbc"),
  name: 'test',
  orders: [],
  products: [
    {
      name: 'as',
      image: '049fcd8d-f954-4aef-bd77-757af881f7c5.jpeg',
      _id: new ObjectId("61531666ad63a47ed692c90b")
    },
  ]
}

我有负责向选定用户添加新产品的 node.js 功能

async function addProduct(req, res, next) {
  await User.findOneAndUpdate(
    { _id: req.params.userId },
    {
      $addToSet: {
        products: {
          ...req.body,
          image: req.file.filename,
        },
      },
    }
  );
  return res.status(200).send();
}

但我只想发送新添加的产品作为回复,请帮我解决这个问题。

标签: node.jsmongodbmongoose

解决方案


我建议您使用 $push 运算符(doc)

{ $push: { <field1>: <value1>, ... } }

将它与您的示例一起使用:

(async () => {
  await User.findByIdAndUpdate(
    '6153769ce997d65baf860cc7', 
    {
      $push: {
        products: {
          name: 'as2',
          image: '589fcd8d-f954-4aef-bd77-757af881f7c5.jpeg'
        }
      }
    }
  );
})();

推荐阅读