【问题标题】:MongoDB: How do I query for the number of elements in an array of documents/dictionaries?MongoDB:如何查询文档/字典数组中的元素数量?
【发布时间】:2018-08-14 23:26:09
【问题描述】:

我有一个文档,其中包含显示用户登录日期和会话 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。

【问题讨论】:

  • 你的代码适合我,我想你只是写了 login_activity,而不是 loginActivity。

标签: arrays mongodb arraylist collections mongodb-query


【解决方案1】:

在这里您可以找到 $group 的用法以及数组的大小

参考:-https://docs.mongodb.com/manual/reference/operator/aggregation/group/

【讨论】:

  • 恐怕你不能那样使用$size(在$group中)
【解决方案2】:

这里不必使用$unwind,只需使用$size操作符

db.user_information.aggregate([
    { $match: {uname: "johndoe"}},
    { $project: { 
        uname: 1,
        total: { $size: "$loginActivity" }
      } 
    }
])

【讨论】:

  • 我相信您的解决方案有效,但我必须将 csv 错误地导入数据库,因为我得到“errmsg”:“$size 的参数必须是一个数组,但类型为:字符串” .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多