mongodb查询中的日期日/分钟

mongodb查询中的日期日/分钟,mongodb,datetime,time-series,isodate,Mongodb,Datetime,Time Series,Isodate,我将时间序列数据存储在mongodb数据库中,其中一个字段是ISODate对象。我正在尝试检索ISODate对象在几分钟和几秒钟内为零值的所有项目。也就是说,在一个小时内具有时间戳的所有对象 有没有办法做到这一点,或者我需要为hour、min、second创建单独的字段,并直接通过查找({“minute”:0,“second”:0})来查询它们 谢谢 是否可以在集合中再添加一列,其中只包含datetime,而不包含分钟和秒。它将使您的查询更快、更易于使用。它将是datetime列,没有分钟和秒部

我将时间序列数据存储在mongodb数据库中,其中一个字段是ISODate对象。我正在尝试检索ISODate对象在几分钟和几秒钟内为零值的所有项目。也就是说,在一个小时内具有时间戳的所有对象

有没有办法做到这一点,或者我需要为hour、min、second创建单独的字段,并直接通过查找({“minute”:0,“second”:0})来查询它们


谢谢

是否可以在集合中再添加一列,其中只包含datetime,而不包含分钟和秒。它将使您的查询更快、更易于使用。它将是datetime列,没有分钟和秒部分

您可以按照@Devesh所说的那样做,或者如果它更合适,您可以使用聚合框架:

db.col.aggregate([
   {$project: {_id:1, date: {mins: {$minute: '$dateField'}, secs: {$second: '$dateField'}}}},
   {$match: {mins: 0, secs: 0}}
]);
同样如此。

在查找查询中使用运算符以及日期聚合运算符,如下所示:

db.collection.find({
    '$expr': {
        '$and': [
            { '$eq': [ { '$minute': '$dateField' }, 0 ] },
            { '$eq': [ { '$second': '$dateField' }, 0 ] },
        ]
    }
})

这似乎是个好主意。除非有一种方法可以直接基于分钟/秒进行过滤,否则我将使用它。谢谢。这正是我想要的,但Devesh的回答可能会让我的情况有更好的性能,因为我将在这些约束条件下运行大量查询。@user1094206实际上,有选择地、仔细地预聚合到另一个字段将产生更快、更可伸缩的结果,但是,我不会使用日期时间列,因为MongoDB中没有这样的东西,只有日期列,相反,您将放置一个对象,其部分构成日期,即:
date:{hours:1,mins:0,secs:0}