如何更新嵌套数组中的对象字段并根据某些输入动态设置字段值

时间:2018-12-14 12:38:32

标签: database mongodb mongoose

我已经在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。

我已经尝试过用猫鼬进行的一些查询来实现第一部分,但似乎都没有用:

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");
});

对于问题的第二部分,我还没有真正提出任何建议,因此,我至少希望对如何处理该问题提供一些指导。

0 个答案:

没有答案