这是我的6条记录的数据...
{
_id: 1,
entityProfiles:['company', 'provider']
},
{
_id: 2,
entityProfiles:['company']
},
{
_id: 3,
entityProfiles:['provider']
},
{
_id: 4,
entityProfiles:[]
},
{
_id: 5,
entityProfiles:null
},
{
_id: 6,
},
我需要知道总数,多少个EntityProfiles具有“提供者”,以及多少个没有使用$ group和/或$ project管道。 我期望如此...
{
_id: 'all',
count: 6
},
{
_id: 'providers',
count: 2
},
{
_id: 'nonProviders',
count: 4
},
...或者这个...
{
_id: null,
all: 6,
providers: 2,
nonProviders: 4
},
答案 0 :(得分:2)
尝试这个:
db.collection.aggregate([
{
$group: {
_id: null,
all: {
$sum: 1
},
providers: {
$sum: {
$cond: [
{
$in: [
"provider",
{
$ifNull: [ "$entityProfiles", [] ]
}
]
},
1,
0
]
}
},
nonProviders: {
$sum: {
$cond: [
{
$in: [
"provider",
{
$ifNull: [ "$entityProfiles", [] ]
}
]
},
0,
1
]
}
}
}
}
])
答案 1 :(得分:0)
请修复$addFields
聚合
db.collection.aggregate([
{
$facet: {
entityProfiles: [
{
$unwind: {
path: "$entityProfiles"
}
},
{
$group: {
_id: "$entityProfiles",
count: {
$sum: 1
}
}
}
],
all: [
{
$group: {
_id: null,
count: {
$sum: 1
}
}
}
]
}
},
{
$addFields: {
all: {
$arrayElemAt: [
"$all",
0
]
}
}
},
{
$addFields: {
all: {
_id: "all",
count: "$all.count",
}
}
}
])