Ниже моя структура данных.
{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michael",
"payments" : [
{
"month": "2018/09"
"amount": "20"
}
]
},
]
}
Я хочу подтолкнуть объект под Майкла payments
{
"month": "2018/09",
"amount": "5000"
}
В этом случае я хочу перезаписать объект, потому что month: "2018/09"
уже существует. Как ниже:
{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michale",
"payments" : [
{
"month": "2018/09"
"amount": "5000"
}
]
},
]
}
И, в случае, когда я хочу подтолкнуть объект, который не существует, тот же month
в платежах, я хочу добавить этот объект в payments
.
{
"month": "2018/10",
"amount": "2000"
}
Итак, ожидаемый результат
{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"payments" : [
{
"month": "2018/09"
"amount": "5000"
},
{
"month": "2018/10"
"amount": "2000"
}
]
},
]
}
Я попробовал, как показано ниже, но это не работает. Мой код генерирует дублированный новый month
объект каждый раз, когда я пытаюсь. Как я могу сделать это правильно?
Rooms.update(
{
_id: "room1",
"members._id": "member1",
"members.$.payments": {
$not: {
$elemMatch: {
month: req.body.month
}
}
}
},
{
$addToSet: {
"members.$.payments": {
month: req.body.month,
amount: req.body.value
}
}
},
{ multi: true }, function (err, result) {
console.log(result)
}
)