计算符合条件的数组元素
Posted
技术标签:
【中文标题】计算符合条件的数组元素【英文标题】:Count array elements that matches condition 【发布时间】:2019-03-05 12:35:14 【问题描述】:我有一个名为“会议”的 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"
,
]
,
...
]
我想得到以下结果:
[
"conferenceName" : "myFirstConference",
"startDate" : 1535722327,
"endDate" : 1535722420,
"internalUsersCount" : 1
"externalUsersCount" : 1,
,
...
]
我尝试了下面的请求,但它不起作用:
db.getCollection("conference").aggregate([
$addFields:
internalUsersCount :
$size : "$participants" : $elemMatch : origin : "internal"
,
externalUsersCount :
$size : "$participants" : $elemMatch : origin : "external"
])
如何计算匹配 "origin" : "internal" 和 "origin" : "external" 的“参与者”数组元素?
【问题讨论】:
【参考方案1】:您需要使用$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"]
])
输出
[
"conferenceName": "myFirstConference",
"endDate": 1535722420,
"externalUsersCount": 1,
"internalUsersCount": 1,
"startDate": 1535722327
]
【讨论】:
这是对我问题的最快和最优雅的回答。非常感谢楼主以上是关于计算符合条件的数组元素的主要内容,如果未能解决你的问题,请参考以下文章