Обновите документ MongoDB с помощью Arrayfilters, если во внутреннем массиве есть только другой массив - PullRequest
0 голосов
/ 28 февраля 2020

Ниже мой вложенный массив, и я хочу обновить значение во внутреннем массиве. Сценарий похож на это решение

Но у меня есть только внутренний массив внутри первого массива. Итак, я не уверен, как указать идентификатор для первого массива

{
    "RequestID": "A22A8D43FE5D8D1409D5984003AB5609",
    "OPC_REQUEST_ID": [{
            "B69BF2DCEBB932A2665920BE14BA14C5": [{
                "Message": "Some message ",
                "Time": "2020-02-25T07:30:52Z",
                "bug": [
                    "27571088",
                    "7452257"
                ],
            "label": [
                    "No Label"
                ],
                "score": -0.5106
            }]
        },
        {
            "8E0FCBBF92D7226ADB6F3DB465DDA7F4": [{
                "Message": "Some message",
                "Time": "2020-02-25T07:31:52Z",
                "bug": [],
                "label": [
                    "No Label"
                ],
                "score": -0.7184
            }]
        }
    ]
}

Я пробовал запрос ниже, но ключ для идентификатора "j" является другим массивом, поэтому я не уверен, как указать ключ / значение для "j" в "arrayFilters"

db.requestid.update({'RequestID':'A22A8D43FE5D8D1409D5984003AB5609'},{'$set':{'OPC_REQUEST_ID.$[j].8E0FCBBF92D7226ADB6F3DB465DDA7F4.$[k].score' : '0'}},
{arrayFilters:[{'j.OPC_REQUEST_ID' :'8E0FCBBF92D7226ADB6F3DB465DDA7F4' }, {'k.Message' : 'Some message'}]})
}

Я хочу отредактировать "Score" во втором массиве с -0,7184 до 0. Таким образом, результат будет

{
    "RequestID": "A22A8D43FE5D8D1409D5984003AB5609",
    "OPC_REQUEST_ID": [{
            "B69BF2DCEBB932A2665920BE14BA14C5": [{
                "Message": "Some message ",
                "Time": "2020-02-25T07:30:52Z",
                "bug": [
                    "27571088",
                    "7452257"
                ],
            "label": [
                    "No Label"
                ],
                "score": -0.5106
            }]
        },
        {
            "8E0FCBBF92D7226ADB6F3DB465DDA7F4": [{
                "Message": "Some message",
                "Time": "2020-02-25T07:31:52Z",
                "bug": [],
                "label": [
                    "No Label"
                ],
                "score": 0
            }]
        }
    ]
}

1 Ответ

1 голос
/ 28 февраля 2020

В вашем примере документа Message: "Some message" и Message: "Some message " - не очень очевидно.

В любом случае, это может быть решением:

db.collection.updateMany(
   { RequestID: 'A22A8D43FE5D8D1409D5984003AB5609' },
   { $set: { 'OPC_REQUEST_ID.$[].8E0FCBBF92D7226ADB6F3DB465DDA7F4.$[k].score': 0 } },
   { arrayFilters: [{ 'k.Message': 'Some message' }] }
)

Вы используете A22A8D43FE5D8D1409D5984003AB5609 в качестве ключа Я не думаю, что это оптимальный дизайн.

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