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

标签 mongodb go timestamp mgo

我正在尝试获取时间戳少于 10 秒前的所有 mongo 数据库文档。我没有找到任何。我认为这是因为我的时间格式不正确。我没有发现他们从 shell db.mgo.find({timestamp:{$gt: new Date(ISODate().getTime() - 86400)}})db.mgo.find({timestamp:{$gt: new Date(ISODate().getTime() - 86400)}})/strong> 过去 24 小时。

// 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。但即使我在我的函数中更改为 UTC,它仍然找不到任何文件

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

最佳答案

But even if I change to UTC in my func it still not finding any documents

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

我假设您的意思是使用从 ObjectId 派生的时间戳值每个文档使用 getTimestamp() 方法。如果是这种情况,您可以利用 mgo/bson函数 NewObjectIdWithTime()看下面的例子:

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)

上面反了你的查询,不是用time查询而是用ObjectId查询。否则,您将不得不获取每个文档,将它们的 ObjectId 转换为时间戳并进行比较,这可能效率不高。

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

关于mongodb - 查找时间戳小于 10 秒的所有 mongo db 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45888313/

相关文章:

node.js - 如何优化 MongoDB 变更流?

javascript - 使用 MongoDB,如何使用变量中的对象更新数组中的对象?

javascript - 渲染 dust.js 模板时出现 TypeError

node.js - 如何通过 CloudFormation 使用 MongoDB 设置 Parse Server?

go - 或者golang模板中的语句结合gt/lt(greaterThan, lowerThan)

go - 在webrtc.PeerConnection中找不到OnNegotiationNeeded事件(pion golang)。但是在官方文档中它表明它在那里

sql - 比较 Oracle 中的时间戳

go - 无法在go env中安装go 1.13。 goenv安装1.13.6失败--go-build:找不到定义:1.13.6

python - 如何使用 pyspark 将时间戳转换为 unix 格式

java - 如何验证 Java 中的时间格式是否符合预期