我有一个公司模型,其中存储了以下付款信息:
let paymentSchema = new Schema({
date: Date,
chargeId: String
amount: Number,
receipt_url: String,
currency: String,
type: String
});
paymentInfo: {
lastPayment: {type: paymentSchema},
paymentHistory: [{type: paymentSchema}],
paymentMethod: paymentMethod,
customerId: customerId
}
)};
paymentInfo
是一个子文档,出于某种验证目的,我在此处使用架构。
在尝试使用以下查询更新公司信息时,它会更新除paymentHistory
之外的所有内容:
Companies.updateOne(
{_id: companyId},
{
paymentInfo: {
paymentMethod: paymentMethod,
customerId: customerId,
lastPayment : paymentObject,
$push: {paymentHistory: paymentObject }
}
有人会说为什么将相同的paymentObject
保存在lastPayment
中,然后将其推送到paymentHistory
-这是我们需要的功能所必需的,并且不会造成任何麻烦。
我还尝试了以下更新查询,它给出了冲突错误-以下代码中的updates
是有效对象,没有$push
的话,它可以正常工作
{$set: updates, $push: {'paymentInfo.paymentHistory': paymentObject}}
冲突错误:
{"driver":true,"name":"MongoError","index":0,"code":40,"errmsg":"Updating the path 'paymentInfo' would create a conflict at 'paymentInfo'"}
我想要什么?
我想在一个数据库调用中更新公司文档-查看该错误,看来我应该进行2个调用,一个调用$ set,另一个调用$ push?第一个更新查询有什么问题吗?
可能的解决方案
一种解决方法是从paymentHistory
中取出paymentInfo
,使其成为主要公司架构的一部分-解决了该问题,但我想将所有与付款相关的内容保留在{{ 1}}。
任何帮助将不胜感激。谢谢