我有一个文档,其中包含显示用户登录日期和会话ID的字典列表。如何使用MongoDB shell查询总登录次数?
{
"uname": "johndoe",
"loginActivity": [{}, {'date': '01/30/2018 15:52', 'SID': '02fe602a'}, {'date': '01/31/2018 20:32', 'SID': '2358eeea'}, {'date': '01/31/2018 20:06', 'SID': '3d720386'}, {'date': '01/25/2018 01:41', 'SID': '40b30ff2'}, {'date': '01/30/2018 15:55', 'SID': '4a3b9129'}, {'date': '01/31/2018 11:26', 'SID': '50fcead9'}, {'date': '01/29/2018 11:10', 'SID': '5f1f53c6'}, {'date': '01/25/2018 08:49', 'SID': 'a0123437'}, {'date': '01/26/2018 11:03', 'SID': 'c31daaf9'}, {'date': '01/31/2018 17:16', 'SID': 'd4073ae3'}, {'date': '01/25/2018 09:50', 'SID': 'd8cfe718'}, {'date': '01/25/2018 15:29', 'SID': 'e281c0cc'}, {'date': '01/26/2018 09:40', 'SID': 'e75e032a'}, {'date': '01/30/2018 10:26', 'SID': 'f3cc187f'}],
"bytesIn": 18751,
"bytesOut": 8343,
"country": "US",
"state": "California"
}
我试过这个问题:
db.user_information.aggregate( [
{ $match: {uname: "johndoe"}},
{ $unwind: "$login_activity"},
{ $group: {_id:0, total:{$sum:1}}}
] )
但我得到了这个结果:
{ "_id" : 0, "total" : 1 }
我无法弄清楚我做错了什么。如果我计算列表开头的空括号,结果应该返回15。
答案 0 :(得分:0)
在这里你可以找到 $ group 的使用,并找到数组的大小
参考: - https://docs.mongodb.com/manual/reference/operator/aggregation/group/
答案 1 :(得分:0)
您不必在这里使用$ unwind,您需要做的就是使用$size运算符
db.user_information.aggregate([
{ $match: {uname: "johndoe"}},
{ $project: {
uname: 1,
total: { $size: "$loginActivity" }
}
}
])