【问题标题】:Remove mongo array if nested array is empty如果嵌套数组为空,则删除 mongo 数组
【发布时间】:2018-08-29 08:45:28
【问题描述】:

我有一个 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.$": "" }});

还是不行

【问题讨论】:

    标签: php database mongodb web


    【解决方案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
                }
        ]
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 2017-02-09
        • 2019-04-25
        • 2021-11-30
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多