我正在使用GraphQL更新保留在另一个数组中的数组内的对象。所以我的模式就是这样
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);
答案 0 :(得分:0)
如果我尝试这种方式,将根本不会更新
instalments.map(instalment => instalment.id === instalmentId ? {...instalment, args} : instalment )
由于“ args
是一个数组,因此它“不更新”(实际上是更新),请尝试以下操作:
instalments.map(instalment =>
instalment.id === instalmentId ? {...instalment, ...args} : instalment )