【问题标题】:How to update an object field inside an array of objects?如何更新对象数组中的对象字段?
【发布时间】:2019-09-22 01:46:39
【问题描述】:

我正在使用 GraphQL 来更新一个位于另一个数组中的数组中的对象。所以我的Schema是这样的

const InstalmentsGroupSchema = new Schema(
  {
    offer: {
      type: Schema.Types.ObjectId,
      ref: "Offer"
    },
    instalments: [
      {
        instalmentCount: { type: Number },
        instalmentAmout: { type: Number },
        dueTo: { type: Date },
        observations: { type: String },
        requestedAmount: { type: Number },
        acceptedRequest: { type: Boolean }
      }
    ]
  },
  { timestamps: true }
);

我想做的是像这样更新分期付款的字段

updateInstalmentGroup: async (
    _,
    { _id, instalmentId, ...args },
    { user }
  ) => {
    try {
      await requireAuth(user);
      const instalmentGroup = await InstalmentsGroup.findOne({
        _id
      });

      if (!instalmentGroup) {
        throw new Error("Not found!");
      }

      const instalments = instalmentGroup.instalments;


      Object.assign(
        instalments,
        instalments.map(instalment =>
          instalment.id === instalmentId ? args : instalment
        )
      );

      return instalmentGroup.save();
    } catch (error) {
      throw error;
    }
  }
};

现在问题来了,当我尝试在这里更新它时:

这部分正在更新但替换所有字段。因此,如果我更新 observations 字段将删除其他字段

instalments.map(instalment =>
  instalment.id === instalmentId ? args : instalment
)

如果我尝试这种方式根本不会更新

instalments.map(instalment =>
  instalment.id === instalmentId ? {...instalment, args} : instalment
)

已解决

const instalmentToUpdate = instalments.find(
  instalment => instalment.id === instalmentId
);

Object.assign(instalmentToUpdate, args);

【问题讨论】:

    标签: javascript mongoose graphql


    【解决方案1】:

    如果我尝试这种方式根本不会更新

    instalments.map(instalment => instalment.id === instalmentId ? {...instalment, args} : instalment )

    它“不更新”(实际上是更新)因为args 是一个数组,试试这个:

    instalments.map(instalment =>
      instalment.id === instalmentId ? {...instalment, ...args} : instalment )
    

    【讨论】:

    • 即使这种方式不起作用,我已经用我得到的解决方案更新了我的帖子
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多