如果嵌套数组为空,则删除mongo数组

时间:2018-08-29 08:45:29

标签: php database mongodb web

我有一个mongo数组,如果该块的嵌套数组为空,我想在其中删除整个块

我已经在下面附加了阵列

{
        "_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 :(得分:1)

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
            }
    ]
}

答案 1 :(得分:0)

您可以将json转换为PHP数组json_decode($json),这样就可以在将其转换为json之后进行处理。 json_encode($arr) 请注意,您可以根据情况检查数组的深度,以查看product.condition_id是否为空。

相关问题