【发布时间】: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