Как удалить все строки line_item, у которых нет поля id внутри carrier_orders, может быть несколько carrier_orders - PullRequest
0 голосов
/ 10 октября 2019

У меня есть документ на монго, в котором мне нужно удалить все элементы line_items, идентификатор которых отсутствует. Проблема заключается в том, что сам carrier_orders является массивом, а line_items также является массивом. ниже приведена структура документа:

{
    "carrierOrder": [
        {

            "id": 1636354,

            "costs": {
                "totalAmount": 110,
                "lineItem": [
                    {
                        "amount": 110,
                        "deleted": false,
                        "id": 3464888,
                        "price": 55,
                        "qty": 2,
                        "code": {
                            "id": 135431,
                            "key": "1600",
                            "value": "Freight - flat"
                        }
                    }
                ]
            },
            "deleted": true,
            "carrierPO": ""
        },
        {

            "id": 1668540,
            "costs": {
                "totalAmount": 110,
                "lineItem": [
                    {
                        "amount": 110,
                        "deleted": false,
                        "id": 3527307,
                        "price": 55,
                        "qty": 2,
                        "code": {
                            "id": 135431,
                            "key": "1600",
                            "value": "Freight - flat"
                        }
                    },
                    {
                        "amount": 110,
                        "deleted": false,
                        "price": 110,
                        "qty": 1,
                        "code": {
                            "id": 135431,
                            "key": "1600",
                            "value": "Freight - flat"
                        }
                    }
                ]
            },
            "deleted": false,
            "carrierPO": ""
        }
    ],
    "id": 3949038,
    "customId": "31428-26396"
}

Я перепробовал много запросов и закрытий, которые я достиг с запросом ниже

db.shipmentFormFieldData.update({"value.carrier_orders.$[].costs.line_items.$[].id":{$exists: false}},{$unset:{"value.carrier_orders.$[].costs.line_items":""}})

Я хочу удалить все строки line_items, в которых поле id являетсяотсутствует

1 Ответ

0 голосов
/ 10 октября 2019

Следующий запрос может дать нам ожидаемый результат:

db.shipmentFormFieldData.updateMany({},
{
    $pull:{
        "carrierOrder.$[].costs.lineItem":{
            "id":null
        }
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...