【发布时间】:2020-09-01 23:51:16
【问题描述】:
我在将项目从 MySQL 迁移到 Mongo 时尝试使用 Go to Learn Mongo DB。我遇到的问题之一是了解如何在 Mongo VIA the Official Mongo DB Driver 中执行比较查询。我可以通过 MongoDB Compass 编写相同的查询,它可以完美运行,但我不知道如何在驱动程序中将其转换为可行的查询。
所以这里是查询
{cached_until: {$lt:1599090092 }}
超级简单,cached_until 属性是一个unix 时间戳。当我插入记录时,我抓取了当前的 ts 和缓存的 until 属性,然后执行插入。这是一些数据。
{
"_id": {
"$oid": "5f4ed5a9272d650f55ee822a"
},
"id": {
"$numberLong": "2116190568"
},
"name": "John Gustafson",
"corporation_id": {
"$numberLong": "98522659"
},
"alliance_id": {
"$numberLong": "99003214"
},
"security_status": 2.817923833,
"not_modified_count": {
"$numberLong": "0"
},
"update_priority": {
"$numberLong": "0"
},
"etag": "\"f3a0614b043a556b02d0e53372d0bd0c5bfa5516b9ecf003b5d4fd64\"",
"cached_until": {
"$numberLong": "1599072490"
},
"created_at": {
"$numberLong": "1599002025"
},
"updated_at": {
"$numberLong": "1599002025"
}
}
使用上面的查询,上面的文档是从 Mongo 返回的,但是如果我使用官方的 Mongo DB Go Driver 将它翻译成 Go,
results, err := app.MongoDB.Collection("characters").Find(ctx, bson.D{bson.E{Key: "cached_until", Value: bson.E{Key: "$lt", Value: time.Now().Add(time.Hour * 24).Unix()}}})
if err != nil {
return err
}
fmt.Println(results.RemainingBatchLength())
输出数字0。过去一天左右我一直在与这个作斗争,老实说,我不确定我做错了什么。这从完整的时间戳开始,但后来我尝试使用 unix 时间戳,当我的比较错误时,我求助于搜索堆栈并且找不到任何东西。
【问题讨论】: