Mon goose $ pu sh для размещения внутри вложенного документа - PullRequest
0 голосов
/ 22 марта 2020

У меня есть модель компании, в которой хранится информация об оплате:

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, а также pu sh это 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 и другой для $ pu sh? Что-то не так с первым запросом на обновление ??

Возможное решение

Один из способов решить эту проблему - извлечь paymentHistory из paymentInfo, так что это является частью основной схемы компании - это решает проблему, но я хочу, чтобы все связанные с оплатой вещи были внутри paymentInfo.

. Любая помощь будет принята. Спасибо

...