У меня есть модель компании, в которой хранится информация об оплате:
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
.
. Любая помощь будет принята. Спасибо