【问题标题】:Robmongo - aggregate values distinct by other value\cloumnRobomongo - 由另一个值\列不同的聚合值
【发布时间】:2017-06-23 11:46:48
【问题描述】:

我是 robmongo 的新手,我收到了一个任务来写一些查询。

假设我有一个集合,其中每个键都有一些值,例如“userId”值和“deviceModel”值。 我需要编写一个查询,显示每个设备型号有多少用户拥有该设备。 这是我到目前为止得到的:

db.device_data.aggregate([ {"$group" : {_id:"$data.deviceModel", count:{$sum:1}}}])

问题在于,它为每个设备汇总了它出现的键的数量。

{
"_id" : { "$binary" : "AN6GmE7Thi+Sd/dpLRjIilgsV/4AAAg=", "$type" : "00" },
"auditVersion" : "1.0",
"currentTime" : NumberLong(1479301118381),
"data" : {
    "deviceDesign" : "bullhead",
    "loginType" : "GOOGLE",
    "source" : "SDKLoader",
    "systemUptimeMillis" : 137652880.0,
    "simCountryIso" : "il",
    "networkOperatorName" : "Cellcom",
    "hasPhonePermission" : true,
    "deviceIdentifier" : "353627074839559",
    "sdkVersion" : "0.7.939.2016-11-14.masterDev",
    "brand" : "google",
    "osVersion" : "7.0",
    "osVersionIncremental" : "3239497",
    "deviceModel" : "Nexus 5X",
    "deviceSDKVersion" : 24.0,
    "manufacturer" : "LGE",
    "sdkShortBuildDate" : "2016-11-14",
    "sdkFullBuildDate" : "Mon Nov 14 22:16:40 IST 2016",
    "product" : "bullhead"
},
"timezone" : "Asia/Jerusalem",
"collectionAlias" : "DEVICE_DATA",
"shortDate" : 17121,
"userId" : "00DE86984ED3862F9277F7692D18C88A@1927cc81cfcf7a467e9d4f4ac7a1534b"}

这是一键锁定的示例。

【问题讨论】:

标签: javascript mongodb aggregation-framework


【解决方案1】:

下面的查询应该为您提供userId 的不同计数deviceModel。我的意思是,如果相同的userId 出现在deviceModel 多个项目中,则只会计算一次。

db.collection.aggregate([ {"$group" : {_id:"$data.deviceModel", userIds:{$addToSet: "$userId"}}
},
{
    $unwind:"$userIds"
},
{
    $group: { _id: "$_id", userIdCount: { $sum:1} }
}])

放松:-

从输入文档中解构一个数组字段以输出一个 每个元素的文档。

在上面的解决方案中,它解构了第一个管道上形成的userId数组。

addToSet:-

返回一个包含所有唯一值的数组,这些值是应用一个 共享一组文档中的每个文档的表达式 按键相同的组。

这个函数确保只有唯一的值被添加到数组中。在上述情况下,userId 被添加到第一个管道中的数组中。

【讨论】:

  • 首先,谢谢!你能简单解释一下 unwind 和 addToSet 的作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2021-05-17
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2014-09-30
相关资源
最近更新 更多