Удалить массив монго, если вложенный массив пуст - PullRequest
0 голосов
/ 29 августа 2018

У меня есть массив Монго, в котором я хочу удалить весь блок, если вложенный массив этого блока пуст

Я прикрепил массив ниже

{
        "_id" : ObjectId("5b17b991c440782b5a218cd1"),
        "vendor_view_id" : 741733,
        "product" : [
                {
                        "id" : ObjectId("5b86546540c1c414543e4333"),
                        "vendor_user_id" : ObjectId("5b17b992c440782b5a218cd2"),
                        "product_type_id" : ObjectId("5ae8348b7ae0d9538e45ab46"),
                        "condition_id" : [ ],
                        "shipping_cost" : 100,
                        "date_added" : "2018-08-29-08-08-05",
                        "date_status_change" : "2018-08-29-08-08-05",
                        "status" : 0
                },
                {
                        "id" : ObjectId("5b8654ba40c1c4145d1f5473"),
                        "vendor_user_id" : ObjectId("5b17b992c440782b5a218cd2"),
                        "product_type_id" : ObjectId("5ae834b17ae0d9538e45ab48"),
                        "condition_id" : [ ],
                        "shipping_cost" : 100,
                        "date_added" : "2018-08-29-08-09-30",
                        "date_status_change" : "2018-08-29-08-09-30",
                        "status" : 0
                },
                {
                        "id" : ObjectId("5b8655a840c1c415080b0a33"),
                        "vendor_user_id" : ObjectId("5b17b992c440782b5a218cd2"),
                        "product_type_id" : ObjectId("5ae834a67ae0d9538e45ab47"),
                        "condition_id" : [
                                {
                                        "_id" : ObjectId("5ae977da7ff1706f3b7dc47a"),
                                        "status" : 0,
                                        "date_added" : "2018-08-29-08-13-28"
                                }
                        ],
                        "shipping_cost" : 100,
                        "date_added" : "2018-08-29-08-13-28",
                        "date_status_change" : "2018-08-29-08-13-28",
                        "status" : 0
                }
        ]
}

Я хотел бы удалить блок массива, в котором product.condition_id пуст

Пока я пробовал это

$this->collection_name->collection->updateOne([
                         '_id' => $vendor_id,
                         ],
                            [
                            '$unset' =>
                                    [
                                        'product.$.condition_id' =>
                                             [
                                                '$size'=>0,
                                             ]
                                    ]
                             ])

РЕДАКТИРОВАТЬ 1:

    db.collection_name.collection({_id : ObjectId('5b17b991c440782b5a218cd1'),
                       "product.condition_id.$":{ "$exists": false }},
                       { "$unset": { "product.$": "" }});

все еще не работает

Ответы [ 2 ]

0 голосов
/ 29 августа 2018
db.collection_name.update(
    {},
    {$pull : {product : {condition_id : {$size : 0} }}},
    { multi: true } // multi : true will updates multiple documents that meet the query criteria
)

если массив condition_id пуст, извлеките документ.

Выход:

{
    "_id" : ObjectId("5b17b991c440782b5a218cd1"),
    "vendor_view_id" : 741733,
    "product" : [
            {
                    "id" : ObjectId("5b8655a840c1c415080b0a33"),
                    "vendor_user_id" : ObjectId("5b17b992c440782b5a218cd2"),
                    "product_type_id" : ObjectId("5ae834a67ae0d9538e45ab47"),
                    "condition_id" : [
                            {
                                    "_id" : ObjectId("5ae977da7ff1706f3b7dc47a"),
                                    "status" : 0,
                                    "date_added" : "2018-08-29-08-13-28"
                            }
                    ],
                    "shipping_cost" : 100,
                    "date_added" : "2018-08-29-08-13-28",
                    "date_status_change" : "2018-08-29-08-13-28",
                    "status" : 0
            }
    ]
}
0 голосов
/ 29 августа 2018

Вы можете преобразовать свой json в массив PHP json_decode($json), чтобы иметь возможность обработать его до того, как он превратится в json после. json_encode($arr) Обратите внимание, что вы можете проверить глубину массива в вашем случае, чтобы увидеть, является ли product.condition_id пустым.

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