Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb查询所有二级单据是否有子单据满足条件_Mongodb_Performance - Fatal编程技术网

Mongodb查询所有二级单据是否有子单据满足条件

Mongodb查询所有二级单据是否有子单据满足条件,mongodb,performance,Mongodb,Performance,我正试图从以下第二级子文档中的通讯簿中获取默认\u账单 { "_id" : ObjectId("5a841ac387c7d70ad36f5ce2"), "user_type" : "retail", "first_name" : "Mayank", "last_name" : "Garg", "addressbook" : { "5a93d64187c7d71562433a22" :

我正试图从以下第二级子文档中的通讯簿中获取
默认\u账单

{ 
        "_id" : ObjectId("5a841ac387c7d70ad36f5ce2"), 
        "user_type" : "retail", 
        "first_name" : "Mayank", 
        "last_name" : "Garg", 
        "addressbook" : {
            "5a93d64187c7d71562433a22" : {
                "consignee_name" : "Jerry Day", 
                "first_name" : "Cole", 
                "last_name" : "Bean", 
                "mobile" : "33333333333333", 
                "street_address" : "", 
                "street_address2" : "", 
                "city" : "", 
                "zip_code" : "58694", 
                "select_country" : "India", 
                "default_billing" : true
            }, 
            "5a9400f887c7d70aac2908e2" : {
                "consignee_name" : "Jerry Day", 
                "first_name" : "Cole", 
                "last_name" : "Bean", 
                "mobile" : "33333333333333", 
                "street_address" : "", 
                "street_address2" : "", 
                "city" : "",  
                "select_state" : "Delhi", 
                "zip_code" : "78004", 
                "select_country" : "India"
            }
        }
    }
我试过这个


您可以使用
$objectToArray
创建对象数组,对数组应用过滤器,然后使用
$arrayToObject
将数组转换回对象。如果在文档中找不到匹配项,则addressbook将是一个空对象。我们可以添加
$match
作为下一阶段,以便在需要时删除它们

db.collection.aggregate([{
    $addFields: {
        addressbook: {
            $objectToArray: '$addressbook'
        }
    }
}, {
    $addFields: {
        addressbook: {
            $filter: {
                input: '$addressbook',
                as: 'ab',
                cond: {$eq: ['$$ab.v.default_billing', true]}
            }
        }
    }
}, {
    $addFields: {
        addressbook: {
            $arrayToObject: '$addressbook'
        }
    }
}]);

$elemMatch
仅对阵列有效。您是否愿意使用聚合?是的,这对我有效
db.collection.aggregate([{
    $addFields: {
        addressbook: {
            $objectToArray: '$addressbook'
        }
    }
}, {
    $addFields: {
        addressbook: {
            $filter: {
                input: '$addressbook',
                as: 'ab',
                cond: {$eq: ['$$ab.v.default_billing', true]}
            }
        }
    }
}, {
    $addFields: {
        addressbook: {
            $arrayToObject: '$addressbook'
        }
    }
}]);