Как я могу обновить один документ во вложенном массиве - PullRequest
1 голос
/ 23 января 2020
{
    "_id": "5e28b029a0c8263a8a56980a",
    "name": "Recruiter",
    "data": [
        {
            "_id": "5e28b0980f89ba3c0782828f",
            "targetLink": "https://www.linkedin.com/in/dan-kelsall-7aa0926b/",
            "name": "Dan Kelsall",
            "headline": "Content Marketing & Copywriting",
            "actions": [
                {
                    "result": 1,
                    "name": "VISIT"
                },
                {
                    "result": 1,
                    "name": "FOLLOW"
                }
            ]
        },
        {
            "_id": "5e28b0980f89ba3c078283426f",
            "targetLink": "https://www.linkedin.com/in/56wergwer/",
            "name": "56wergwer",
            "headline": "asdgawehethre",
            "actions": [
                {
                    "result": 1,
                    "name": "VISIT"
                }
            ]
        }
    ]
}

Вот один из моих документов на mongodb. Я хотел бы обновить data->actions->result Итак, это то, что я сделал

Campaign.updateOne({
    'data.targetLink': "https://www.linkedin.com/in/dan-kelsall-7aa0926b/",
    'data.actions.name': "Follow"
}, {$set: {'data.$.actions.result': 0}})

Но, похоже, ничего не обновляется, и даже он не может найти документ по этому «data.actions.name»

1 Ответ

1 голос
/ 23 января 2020

Вам необходимо оператор позиционной фильтрации , поскольку обычный позиционный оператор ($) можно использовать только для одного уровня вложенных массивов:

Campaign.updateOne(
     { "_id": "5e28b029a0c8263a8a56980a", "data.targetLink": "https://www.linkedin.com/in/dan-kelsall-7aa0926b/" },
     { $set: { "data.$.actions.$[action].result": 0 } },
     { arrayFilters: [ { "action.name": "Follow" } ] }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...