Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongodb聚合在两个集合之间使用group by进行区分、平均和求和_Node.js_Mongodb_Nosql_Aggregation Framework - Fatal编程技术网

Node.js Mongodb聚合在两个集合之间使用group by进行区分、平均和求和

Node.js Mongodb聚合在两个集合之间使用group by进行区分、平均和求和,node.js,mongodb,nosql,aggregation-framework,Node.js,Mongodb,Nosql,Aggregation Framework,我有用户收集的数据如下 { "_id" : ObjectId("5da594c15324fec81d000027"), "password" : "******", "activation" : "Active", "userType" : "Author", "email" :

我有用户收集的数据如下

{
    "_id" : ObjectId("5da594c15324fec81d000027"),
    "password" : "******",
    "activation" : "Active",
    "userType" : "Author",
    "email" : "something@gmail.com",
    "name" : "Something",
    "profilePicture" : "profile_pictures/5da594c15324fec81d0000271607094354423image.png",
    "__v" : 0
}
{
    "_id" : ObjectId("5fcb7bb4485c34a41900002b"),
    "duration" : 2.54,
    "page" : 1,
    "activityDetails" : "Viewed Page for seconds",
    "contentType" : "article",
    "activityType" : "articlePageStayTime",
    "label" : 3,
    "bookId" : ObjectId("5f93e2cc74153f8c1800003f"),
    "ipAddress" : "::1",
    "creator" : ObjectId("5da594c15324fec81d000027"),
    "created" : ISODate("2020-12-05T12:23:16.867Z"),
    "__v" : 0
}
另一方面,用户日志有这样的数据

{
    "_id" : ObjectId("5da594c15324fec81d000027"),
    "password" : "******",
    "activation" : "Active",
    "userType" : "Author",
    "email" : "something@gmail.com",
    "name" : "Something",
    "profilePicture" : "profile_pictures/5da594c15324fec81d0000271607094354423image.png",
    "__v" : 0
}
{
    "_id" : ObjectId("5fcb7bb4485c34a41900002b"),
    "duration" : 2.54,
    "page" : 1,
    "activityDetails" : "Viewed Page for seconds",
    "contentType" : "article",
    "activityType" : "articlePageStayTime",
    "label" : 3,
    "bookId" : ObjectId("5f93e2cc74153f8c1800003f"),
    "ipAddress" : "::1",
    "creator" : ObjectId("5da594c15324fec81d000027"),
    "created" : ISODate("2020-12-05T12:23:16.867Z"),
    "__v" : 0
}
我尝试做的与此sql查询等效

SELECT name,count(page),sum(duration),avg(DISTINCT(label)),COUNT(DISTINCT(bookId)) FROM users JOIN userlogs ON users._id=userlogs.creator where userlogs.activityType<>"articleListeningTime" group by users._id.
从用户中选择名称、计数(页面)、总和(持续时间)、平均值(不同的(标签))、计数(不同的(bookId)),并在用户上加入userlogs。\u id=userlogs.creator where userlogs.activityType“ArticleListingTime”用户分组。\u id。

我可以按和求和一起进行正常的
分组。但是如何用这个来做
avg distinct
count distinct
?我使用的是mongodb 3.2版

我认为这不需要
$group
阶段,您可以使用
$setUnion
$size
$avg
操作符

  • $lookup
    用户日志
    集合
  • $project
    显示必填字段,并根据您的条件筛选
    用户日志
  • $project
    用户日志获取统计信息
    
    • 使用
      $size
    • 使用
      $sum
    • 使用
      $setUnion
      $avg
    • 使用
      $serUnion
      $size

我认为这不需要
$group
阶段,您可以使用
$setUnion
$size
$avg
操作符

  • $lookup
    用户日志
    集合
  • $project
    显示必填字段,并根据您的条件筛选
    用户日志
  • $project
    用户日志获取统计信息
    
    • 使用
      $size
    • 使用
      $sum
    • 使用
      $setUnion
      $avg
    • 使用
      $serUnion
      $size

您是否将密码存储为明文?你不应该这样做,而是存储一个散列值。谢谢你的提问!我将它存储为散列值。粘贴到此处后,刚替换为星号。是否将密码存储为明文?你不应该这样做,而是存储一个散列值。谢谢你的提问!我将它存储为散列值。粘贴到这里后,刚刚替换为星号。谢谢!它只有在过滤器中添加“as”后才起作用。顺便说一句,你的意思是在最后一点中“使用$setUnion和$size获取唯一bookId的计数”吗?好的,在$filter的最新版本中,“as”是可选的,在最后一点中是的,我已经更正了这两个错误。谢谢!没想到没有分组就不可能了!谢谢它只有在过滤器中添加“as”后才起作用。顺便说一句,你的意思是在最后一点中“使用$setUnion和$size获取唯一bookId的计数”吗?好的,在$filter的最新版本中,“as”是可选的,在最后一点中是的,我已经更正了这两个错误。谢谢!没想到没有分组就不可能了!