Как обновить поля объекта внутри вложенного массива и динамически установить значение поля на основе некоторых входных данных - PullRequest
0 голосов
/ 14 декабря 2018

Я некоторое время работал над базой данных Mongo.В базе данных есть некоторые посещения, которые имеют эту форму:

[
 {
    "isPaid": false,
    "_id": "5c12bc3dcea46f9d3658ca98",
    "clientId": "5c117f2d1d6b9f9182182ae4",
    "came_by": "Twitter Ad",
    "reason": "Some reason",
    "doctor_services": "Some service",
    "doctor": "Dr. Michael",
    "service": "Special service",
    "payments": [
        {
            "date": "2018-12-13T21:23:05.424Z",
            "_id": "5c12cdb9b236c59e75fe8190",
            "sum": 345,
            "currency": "$",
            "note": "First Payment"
        },
        {
            "date": "2018-12-13T21:23:07.954Z",
            "_id": "5c12cdbbb236c59e75fe8191",
            "sum": 100,
            "currency": "$",
            "note": "Second payment"
        },
        {
            "date": "2018-12-13T21:23:16.767Z",
            "_id": "5c12cdc4b236c59e75fe8192",
            "sum": 5,
            "currency": "$",
            "note": "Third Payment"
        }
    ],
    "price": 500,
    "createdAt": "2018-12-13T20:08:29.425Z",
    "updatedAt": "2018-12-13T21:42:21.559Z",
}
]

Мне нужно найти какой-либо запрос, чтобы обновить поле одного платежа на основе _id посещения и _id платежа, который находится внутри вложенногомассив.Кроме того, когда вы обновляете сумму платежа до некоторого числа, чтобы сумма всех платежей была больше или равна цене, поле isPaid автоматически обновляется до true.

Я пробовал некоторые запросы в mongoose, чтобы получить первыйчасть, но ни один из них, кажется, не работает:

let paymentId = req.params.paymentId;
let updatedFields = req.body;

Visit.update(
{ "payments._id": paymentId },
{
  $set: {
    "visits.$": updatedFields
  }
}
).exec((err, visit) => {
if (err) {
  return res.status(500).send("Couldn't update payment");
}
return res.status(200).send("Updated payment");
});

Что касается второй части вопроса, я ничего не придумал, поэтому я был бы признателен, по крайней мере, дать некоторое указание о том, как подойти к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...