Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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/2/node.js/33.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/date/2.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
Javascript MongoDB:如何在带有时间戳输入的查询中按15分钟周期进行过滤?_Javascript_Node.js_Mongodb_Datetime_Filter - Fatal编程技术网

Javascript MongoDB:如何在带有时间戳输入的查询中按15分钟周期进行过滤?

Javascript MongoDB:如何在带有时间戳输入的查询中按15分钟周期进行过滤?,javascript,node.js,mongodb,datetime,filter,Javascript,Node.js,Mongodb,Datetime,Filter,我有一个“简单”的问题,我在脑海中想到了一个“复杂”的解决方案,但我在执行它时遇到了问题 问题是,我有一个模式: const DensitySchema = mongoose.Schema( { map_id: mongoose.Schema.Types.ObjectId, name: String, location: { x: Number, y: Number }, density: Number, time: N

我有一个“简单”的问题,我在脑海中想到了一个“复杂”的解决方案,但我在执行它时遇到了问题

问题是,我有一个模式:

const DensitySchema = mongoose.Schema(
  {
    map_id: mongoose.Schema.Types.ObjectId,
    name: String,
    location: {
      x: Number,
      y: Number
    },
    density: Number,
    time: Number
  },
  {
    timestamps: true
  }
);
我还有一个疑问:

Density.find({ map_id: req.params.mapId, time: { $gte: req.query.from, $lte: req.query.to } }).then(data => {
    console.log(data);
    res.send(data);
  });
时间和从-到值是时间戳,例如,
1579148100

在数据库中,我有每15秒出现一次的时间戳条目。但是我只想得到那些发生在时间戳中的结果,这些时间戳的分钟数是
15
0
的倍数,所以
0,15,30,45

如果我问凌晨1点到凌晨2点之间的值,我会得到4个结果,而不是几十个

根据我在mongo文档中看到的内容,我应该能够以某种方式过滤查询请求,通过某种方式将时间值转换为可读的日期,然后检查分钟数是否是这些值之一。。。但我想我不够聪明,不知道如何。。。文档对我来说还不是那么容易理解,因为我本周开始使用mongo

我将非常感谢你的帮助


提前感谢并致以亲切问候。

时间戳是一个
长的
,相应的时间(小时、分钟、月等格式)可以用
日期
字段构造。例如,我有三个时间戳和相应的时间(小时和分钟):

从Mongo Shell中,
新日期(1579243569270)
获取日期/时间为
ISODate(“2020-01-17T06:46:09.270Z”)
。从中我们可以找到时间分钟,在本例中为
06:46
。并且,我们在查询中使用
查找
聚合
,如下所示:

输入集合:


查询:

_或_

结果将是带有时间戳的两个文档,
1579243509270
157924415497

该代码针对Mongo Shell进行了测试。查询使用与一起使用的来构造查询



[编辑和添加]

db.test.find( { $expr: { $in: [ { $minute: { $toDate: "$ts" } }, MINS_ARRAY ] },
                map_id: req.params.mapId,
                time: { $gte: req.query.from, $lte: req.query.to } 
} )

时间戳为
,相应的时间(小时、分钟、月等格式)可以用
日期
字段构造。例如,我有三个时间戳和相应的时间(小时和分钟):

从Mongo Shell中,
新日期(1579243569270)
获取日期/时间为
ISODate(“2020-01-17T06:46:09.270Z”)
。从中我们可以找到时间分钟,在本例中为
06:46
。并且,我们在查询中使用
查找
聚合
,如下所示:

输入集合:


查询:

_或_

结果将是带有时间戳的两个文档,
1579243509270
157924415497

该代码针对Mongo Shell进行了测试。查询使用与一起使用的来构造查询



[编辑和添加]

db.test.find( { $expr: { $in: [ { $minute: { $toDate: "$ts" } }, MINS_ARRAY ] },
                map_id: req.params.mapId,
                time: { $gte: req.query.from, $lte: req.query.to } 
} )

我回复了你的答案,所以我可以使用代码格式,我也是stackoverflow新手,呵呵,谢谢你的帮助!!我回复了你的答案,所以我可以使用代码格式,我也是stackoverflow新手,呵呵,谢谢你的帮助!!
const MINS_ARRAY = [ 0, 15, 30, 45 ]

db.test.find( { $expr: { $in: [ { $minute: { $toDate: "$ts" } }, MINS_ARRAY ] } } )
db.test.aggregate( [
  { 
      $match: { 
          $expr: { 
              $in: [ { $minute: { $toDate: "$ts" } }, MINS_ARRAY ] }
          }
      }
  }
] )
db.test.find( { $expr: { $in: [ { $minute: { $toDate: "$ts" } }, MINS_ARRAY ] },
                map_id: req.params.mapId,
                time: { $gte: req.query.from, $lte: req.query.to } 
} )