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

查找时间戳小于10秒的所有mongo db文档

鲁霄
2023-03-14

我正在尝试获取时间戳不到10秒前的所有mongo db文档。我找不到。我想这是因为我的时间格式不正确。我没有发现他们从shell db查询mongo db。mgo。查找过去24小时的({timestamp:{$gt:new Date(ISODate().getTime()-86400)})。

// FindLast 10min
func FindLast(session *mgo.Session, db, collection string) ([]Syslog, error) {
  var results []Syslog
  t := time.Now().Add(-10 * time.Second)
  c := session.DB(db).C(collection)
  err := c.Find(
    bson.M{
        "timestamp": bson.M{
            "$gt": t,         
        },
  }).All(&results)
  return results, err
}

如果我选择文档ObjectId(“…”)中的一个。getTimestamp()它显示的是ISODate(“2017-08-25T19:14:54Z”),它比我早4小时,所以是UTC。但即使我在func中更改为UTC,它仍然找不到任何文档

t := time.Now().UTC().Add(-time.Duration(10)*time.Minute).Format("2006-01-02 15:04:05")

共有1个答案

韩照
2023-03-14

但即使我在func中更改为UTC,它仍然找不到任何文档

这是因为文档中没有字段时间戳。您使用的查询语法相当于询问从集合中选择时间戳大于T的所有文档

我假设您要做的是使用getTimestamp()方法使用从每个文档的ObjectId派生的时间戳值。如果是这种情况,您可以使用mgo/bson函数newObjectedWithTime()参见以下示例:

currentTime := time.Now()
queryTime := currentTime.Add(-10 * time.Second)

// Generate a dummy ObjectId with a specified timestamp for querying
var oidtime = bson.NewObjectIdWithTime(queryTime)
query := bson.M{"_id": bson.M{"$gt": oidtime}}
err := collection.Find(query).All(&documents)

以上内容与您的查询相反,我们使用ObjectId进行查询,而不是使用时间进行查询。否则,您必须获取每个文档,将它们的ObjectId转换为时间戳并进行比较,这可能没有那么有效。

或者,根据您的用例,您可以使用$currentDate操作符为每个文档添加一个时间戳值,以将字段的值设置为当前日期。

 类似资料:
  • 问题内容: 当我尝试将我的数据框分组到一个列上,然后尝试查找每个分组的最小值时,似乎无法在非数字列上执行此操作。然后,如何正确过滤分组依据上的最短(最早)日期? 我正在从Postgresql S3实例流式传输数据帧,因此已经配置了数据。 问题答案: 只需直接执行聚合,而不使用辅助程序即可: 与之不同的是,它将适用于任何类型。

  • 任何建议或忠告都会真的很有帮助。提前道谢。

  • 问题内容: 该查询可以很容易地从第二列返回将来的时间戳,因为它是“数学地”舍入的。这可能会导致一些意外的错误,只是因为检索到的时间是从将来开始的0.5s。 所以我的问题是-最简单的四舍五入方法是什么? PS:我知道转换为秒数并返回的解决方案 PPS:结果应为时间戳类型,而不是字符串 UPD : 找到了解决方案 问题答案:

  • 问题内容: 我想从数据库中的特定表中删除所有时间戳超过180天的行。 我已经试过了: 但这会删除所有行,而不仅仅是删除六个月以上的行。 我在on_search表中有一列称为search_date,其中包含创建该行的时间。 问题答案:

  • 我有一个非常基本的spring boot 2.2.4应用程序,它使用带有阻塞调用的webclient查询下游系统。我没有对webclient进行任何配置(设置超时等),只是“开箱即用”。 我发现webClient调用的响应时间要么低于3秒,要么正好是45秒,我觉得很奇怪。为什么如果响应慢,总是45秒? 我能找到的关于45秒的唯一参考来自ReactorNetty留档: 4.6. 连接池 默认情况下,

  • 我需要使用格式“m-d-Y H:I:s.u”(包括毫秒)在laravel应用程序上以高精度的时间戳存储更新的_ 根据laravel文档,我可以通过在类上设置$dateFormat属性来自定义日期格式,但是。。。 主要问题是Laravel的模式生成器在数据库中添加了一列类型时间戳,当我使用$table- 有什么办法可以做到这一点吗?