当前位置: 首页 > 知识库问答 >
问题:

MongoDB查找今天的记录[重复]

陶智
2023-03-14

在Mongo shell中,我将如何过滤今天(或特定日期)添加的记录?我没有新记录时间戳的特定字段,但我想它可以从ObjectID恢复。

共有2个答案

白刚洁
2023-03-14

要获取从今天开始的所有记录:

var startOfToday = new Date();
startOfToday.setHours(0,0,0,0);
// creates ObjectId() from date:
var _id = Math.floor(startOfToday.getTime() / 1000).toString(16) + "0000000000000000";

> db.collection("records")
    .find( { _id: { $gte: ObjectId(_id) } });

要获取给定时间段(例如:昨天)的所有记录:

var yesterdayStart = new Date();
yesterdayStart.setDate(yesterdayStart.getDate() - 1);
yesterdayStart.setHours(0,0,0,0);
var startId = Math.floor(yesterdayStart.getTime() / 1000).toString(16) + "0000000000000000";

var yesterdayEnd = new Date();
yesterdayEnd.setDate(yesterdayEnd.getDate() - 1);
yesterdayEnd.setHours(23,59,59,999);
var endId = Math.floor(yesterdayEnd.getTime() / 1000).toString(16) + "0000000000000000";

> db.collection("records")
    .find( { _id: { 
                    $gte: ObjectId(startId),
                    $lte: ObjectId(endId)
                  } 
           }
    );
丌官炎彬
2023-03-14

我们可以使用$where

db.collection.find(
   { $where: "this._id.getTimestamp() >= ISODate('2017-02-25')" }
)

要获取今天的文档,或者最好是从最后一个午夜开始:

db.collection.find( { $where: function() { 
    today = new Date(); //
    today.setHours(0,0,0,0);
    return (this._id.getTimestamp() >= today)
} } );

当然,有一个索引的时间戳字段,或者按照这种方法计算开始日期的ObjectID并将其与\u id进行比较要快得多,因为\u id也是索引的。

 类似资料:
  • 问题内容: 我有此查询以获取月结果。但是我想得到今天的结果。 做这个的最好方式是什么? 问题答案: 您的开始日期对象应将当前日期时间设置为(毫秒精度),并将今天的时间设置为: 然后像往常一样在您的MongoDB查询运算符中传递修改后的日期对象: 如果您正在使用 momentjs 库,则可以通过在当前当前日期对象上使用 and 方法,并将字符串作为参数传递来实现:

  • 问题内容: 我想返回最近30天内添加到数据库中的所有记录。由于显示目的,我需要将日期转换为mm / dd / yy。 我的陈述未能将记录限制为最近30天-它选择了所有记录。 谁能指出我正确的方向?感觉就像我接近了。 谢谢,祝你度过愉快的一周。 问题答案: 您需要在子句而不是子句中应用: 另请注意,该查询仅返回日期的一部分,因此,如果您将“ a” 存储为时间部分,则此查询将不会选择今天的记录。 在这

  • 问题内容: 如何提出一个存储过程来选择过去30天的结果? 问题答案: 用适当的列名称替换第一个GETDATE()。

  • 1.手机版 查找方法:群聊右上角图标-查找聊天内容   2.电脑版 查找方法:群聊右上角图标-查找聊天内容

  • 问题内容: 我想在MySQL数据库中提取重复记录。这可以通过以下方式完成: 结果是: 我想将其拉出,以使其显示重复的每一行。就像是: 关于如何做到这一点有什么想法?我试图避免做第一个,然后在代码中用第二个查询查找重复项。 问题答案: 关键是重写此查询,以便可以将其用作子查询。

  • find 查找匹配标准的记录,可以链式查询(见下文): Person.find({status:'active'}, function(err, results) { // ... }); 你也可以限制结果的个数,这条语句限制结果为10个: Person.find({status:'active'}, 10, function(err, results) { // ... }); Pers