gpt4 book ai didi

mongodb - MongoDB官方GoLang驱动程序比较运算符

转载 作者:行者123 更新时间:2023-12-01 22:20:44 24 4
gpt4 key购买 nike

我在将项目从MySQL迁移到Mongo时尝试使用Go to Learn Mongo DB。我遇到的问题之一是了解如何在Mongo VIA(官方Mongo数据库驱动程序)中执行比较查询。我可以通过MongoDB Compass编写相同的查询,并且可以完美地工作,但是我不知道如何在驱动程序中将其转换为可行的查询。
所以这是查询


{cached_until: {$lt:1599090092 }}
这非常简单,cached_until属性是unix时间戳。当我插入记录时,我抓取了当前ts并对其进行缓存直到属性,然后执行插入操作。这是一些数据。


{
"_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驱动程序将其翻译成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时间戳,当我的比较不正确时,我求助于搜索堆栈而找不到任何东西。

最佳答案

我误读了文档。
我设置的过滤器的结构不正确,如下所示:

bson.D{bson.E{Key: "cached_until", Value: bson.E{Key: "$lt", Value: time.Now().Add(time.Hour * 24).Unix()}}}
应该:

bson.D{bson.E{Key: "cached_until", Value: bson.D{bson.E{Key: "$lt", Value: time.Now().Add(time.Hour * 24).Unix()}}}}
区别在于设置值 cached_until。我正在设置 Value: bson.E{Key: COlumn, Value: value}而不是 Value: bson.D{bson.E{Key: Operator, Value: value}}

关于mongodb - MongoDB官方GoLang驱动程序比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63696869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com