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'
}
}
}]);