【问题标题】:MongoDB Official GoLang Driver Comparision OperatorMongoDB 官方 GoLang 驱动比较算子
【发布时间】: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 时间戳,当我的比较错误时,我求助于搜索堆栈并且找不到任何东西。

【问题讨论】:

    标签: mongodb go logic


    【解决方案1】:

    我误读了文档。

    我设置的过滤器结构不正确,如下:

    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}}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多