HKH*_*AIT 6 database mongodb mongodb-query aggregation-framework
我有一个名为“会议”的 mongoDB 集合,其中包含一组参与者,如下所示:
[
{
"_id" : 5b894357a0c84d5a5d221f25,
"conferenceName" : "myFirstConference",
"startDate" : 1535722327,
"endDate" : 1535722420,
"participants" : [
{
"name" : "user1",
"origin" : "internal",
"ip" : "192.168.0.2"
},
{
"name" : "user2",
"origin" : "external",
"ip" : "172.20.0.3"
},
]
},
...
]
Run Code Online (Sandbox Code Playgroud)
我想得到以下结果:
[
{
"conferenceName" : "myFirstConference",
"startDate" : 1535722327,
"endDate" : 1535722420,
"internalUsersCount" : 1
"externalUsersCount" : 1,
},
...
]
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的请求,但它不起作用:
db.getCollection("conference").aggregate([
{
$addFields: {
internalUsersCount : {
$size : { "$participants" : {$elemMatch : { origin : "internal" }}}
},
externalUsersCount : {
$size : { "$participants" : {$elemMatch : { origin : "external" }}}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
如何计算与{"origin" : "internal"}和{"origin" : "external"}匹配的“参与者”数组元素?
Ash*_*shh 13
您需要使用$filter聚合过滤掉external原点和internal原点以及$size聚合以计算数组的长度。
像这样的东西
db.collection.aggregate([
{ "$addFields": {
"internalUsersCount": {
"$size": {
"$filter": {
"input": "$participants",
"as": "part",
"cond": { "$eq": ["$$part.origin", "internal"]}
}
}
},
"externalUsersCount": {
"$size": {
"$filter": {
"input": "$participants",
"as": "part",
"cond": { "$eq": ["$$part.origin", "external"] }
}
}
}
}}
])
Run Code Online (Sandbox Code Playgroud)
输出
[
{
"conferenceName": "myFirstConference",
"endDate": 1535722420,
"externalUsersCount": 1,
"internalUsersCount": 1,
"startDate": 1535722327
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3694 次 |
| 最近记录: |