猫鼬findByIdAndUpdate:无法更新数组字段

时间:2020-09-15 10:39:04

标签: arrays mongodb mongoose

我是猫鼬的新手,我有一个问题。 在我的应用中,我有一个像这样的旅行模型:

const travelSchema = new mongoose.Schema({
  title: {
    type: String,
    required: [true, 'Please add a title'],
    trim: true,
    maxlength: [50, 'Title can not be more than 50 characters'],
  },
  cities: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'City',
    },
  ],
});

和类似这样的城市模型:

const citySchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    trim: true,
  },
  location: {
    type: {
      type: String,
      enum: ['Point'],
      required: true,
    },
    coordinates: {
      type: [Number],
      required: true,
    },
  },
  travels: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Travel',
    },
  ],
});

因此,当我删除旅行时,我想从旅行所涉及的城市的“旅行”字段中删除travel_id。

我在这里:

exports.deleteTravel = asyncHandler(async (req, res, next) => {
  const travel = await Travel.findByIdAndDelete(req.params.id);
  travel.cities.map(cityId => {
    City.findByIdAndUpdate(
      cityId,
      { travels: travels.filter(id => id !== travel._id) },
      {
        new: true,
        runValidators: true,
      }
    );
  });


  res.status(200).json({ success: true, data: {} });
});

我收到此错误消息:错误:行程未定义

你知道为什么吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

它是这样工作的:)

exports.deleteTravel = asyncHandler(async (req, res, next) => {
  const travel = await Travel.findByIdAndDelete(req.params.id);
  travel.cities.map(async cityId => {
    await City.findByIdAndUpdate(
      cityId,
      { $pull: { travels: travel._id } },
      {
        new: true,
        runValidators: true,
      }
    );
  });