如何在 mongoose 中更新嵌套数组值?

How do I update nested array values in mongoose?

提问人:Ope Afolabi 提问时间:12/27/2021 更新时间:12/27/2021 访问量:256

问:

我对 nodejs/express 相当陌生,我正在用 devchallenges.io 练习全栈开发,我正在做 shoppingify 挑战。我正在尝试更新我在 items 数组中定位的项目的数量。我知道我下面的尝试很糟糕,我真的很难理解能够这样做的逻辑。

// @route    PUT api/list/item/quantity/:id
// @desc     Increase or decrease quantity
// @access   Private
router.put('/item/quantity/:id', auth, async (req, res) => {
  const { action } = req.body;
  try {
    let list = await List.findOne({ user: req.user.id });

    const item = list.items.find(
      (item) => item._id.toString() === req.params.id
    );
    list = list.updateOne(
      { 'items._id': req.params.id },
      { $set: { 'items.quantity': item.quantity + 1 } }
    );

    await list.save();
    return res.json(list);
  } catch (error) {
    console.error(error.message);
    res.status(500).send('Server Error');
  }
});
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ListSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
  },
  name: {
    type: String,
    default: 'Shopping List',
  },
  items: [
    {
      name: {
        type: String,
        default: '',
      },
      note: {
        type: String,
        default: '',
      },
      image: {
        type: String,
        default: '',
      },
      category: {
        type: String,
        default: '',
      },
      quantity: {
        type: Number,
        default: 1,
      },
    },
  ],
  date: {
    type: Date,
    default: Date.now,
  },
});

module.exports = List = mongoose.model('list', ListSchema);
node.js mongodb express 猫鼬

评论


答:

1赞 Smit Gajera 12/27/2021 #1

看,这是我的更新供应商路线,我正在更新嵌套的街道和城市名称。

router.put("/update-vendors", async (req, res, next) => {
  const vendor = await Vendor.updateOne(
    {
      "address.street": "Street2",
    },
    {
      $set: {
        "address.$.street": req.body.street,
        "address.$.city": req.body.city,
      },
    }
  );
  res.status(200).json(vendor);
});

您可以借助 和其他方法更新特定内容$set$push

评论

0赞 Ope Afolabi 12/27/2021
你是救命恩人,谢谢:)
1赞 Smit Gajera 12/27/2021
太好了,我很高兴看到这项工作,因为您需要更多帮助,请告诉我