Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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/5/flutter/10.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 查找两个文档的日期差异_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 查找两个文档的日期差异

Node.js 查找两个文档的日期差异,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我收集了以下文件: { type: 1, user: 1, date: "2019-01-01 11:52" }, { type: 1, user: 2, date: "2019-01-01 11:55" }, { type: 2, user: 2, date: "2019-01-01 12:02" }, { type: 2, user: 1, date: "2019-01-01 12:10" }, 我想找出同一个用户在类型之间和类型之间花费的时间。例如: {

我收集了以下文件:

{ type: 1,
  user: 1,
  date: "2019-01-01 11:52"
},
{ type: 1,
  user: 2,
  date: "2019-01-01 11:55"
},
{ type: 2,
  user: 2,
  date: "2019-01-01 12:02"
},
{ type: 2,
  user: 1,
  date: "2019-01-01 12:10"
},
我想找出同一个用户在类型之间和类型之间花费的时间。例如:

{ user: 1,
  time: 18// minutes
},
{ user: 2,
  time: 7
}

mongoose怎么可能做到这一点呢?

我假设每个用户只有两个文档。如果您想计算每个用户两种以上类型之间的时间差,我的答案会有所不同。我将采取以下步骤来实现这一目标:

  • 使用find()函数从MongoDB获取集合

  • 创建一个新的空对象以保存结果

  • 在集合中的每个文档上循环:

  • 如果结果对象中不存在该用户id,请将该用户及其类型和日期添加到结果对象中

  • 如果用户id已存在于结果对象中,请计算此文档与先前在结果对象中保存的日期之间的时间差

  • 从结果集合中删除类型和日期

代码(未测试) 生成的对象应如下所示:

{
 1: {
  "time": 3 
 },
 2: {
  "time": 5
 },
 3: {
  "time": 2 
 },
 4: {
  "time": 4 
 }
}

results对象中的键是用户id。此程序以分钟为单位计算每个用户具有不同类型的两个文档中两个日期之间的绝对时间差。如果要计算两种以上类型之间的时间差,代码会稍微复杂一些。

我假设每个用户只有两个文档。如果您想计算每个用户两种以上类型之间的时间差,我的答案会有所不同。我将采取以下步骤来实现这一目标:

  • 使用find()函数从MongoDB获取集合

  • 创建一个新的空对象以保存结果

  • 在集合中的每个文档上循环:

  • 如果结果对象中不存在该用户id,请将该用户及其类型和日期添加到结果对象中

  • 如果用户id已存在于结果对象中,请计算此文档与先前在结果对象中保存的日期之间的时间差

  • 从结果集合中删除类型和日期

代码(未测试) 生成的对象应如下所示:

{
 1: {
  "time": 3 
 },
 2: {
  "time": 5
 },
 3: {
  "time": 2 
 },
 4: {
  "time": 4 
 }
}
results对象中的键是用户id。此程序以分钟为单位计算每个用户具有不同类型的两个文档中两个日期之间的绝对时间差。如果要计算两种以上类型之间的时间差,代码会稍微复杂一些。

使用

减去两个数字以返回差值,或者减去两个日期以毫秒为单位返回差值,或者减去一个日期和一个数字以毫秒为单位返回结果日期

{ $subtract: [ <expression1>, <expression2> ] }
{$subtract:[,]}
使用

减去两个数字以返回差值,或者减去两个日期以毫秒为单位返回差值,或者减去一个日期和一个数字以毫秒为单位返回结果日期

{ $subtract: [ <expression1>, <expression2> ] }
{$subtract:[,]}