猫鼬$ push到子文档中的数组

时间:2020-03-22 12:22:07

标签: mongodb mongoose mongodb-query mongoose-schema

我有一个公司模型,其中存储了以下付款信息:

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}}。

任何帮助将不胜感激。谢谢

0 个答案:

没有答案