登录
首页 >  Golang >  Go问答

查询在使用 Golang 与 MongoDB 时的零时区时刻

来源:stackoverflow

时间:2024-03-07 19:00:25 443浏览 收藏

一分耕耘,一分收获!既然都打开这篇《查询在使用 Golang 与 MongoDB 时的零时区时刻》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

所以我有一个非常简单的结构,它保存在 mongodb 中

type test struct {
    id                  string                            `bson:"_id"`
    status              string                            `bson:"status"`
    testtime            time.time                         `bson:"testtime"`
}

在检索时,我想确保我没有检索 testtime 未初始化的任何值,即排除 time.time 的缺失/零等效值

filter := bson.m{"status": "ready"}

有关如何更新过滤条件的任何建议请参见此处

cursor, err := r.store.Db.Collection("testCollection").Find(ctx, filter)
    if err != nil {
        return err
    }
    err = cursor.All(ctx, result)
    if err != nil {
        return err
    }
    return nil
   }

正确答案


这取决于您如何将文档插入 mongodb。

如果您使用 test 结构插入它们,而您没有更改 testtime 字段,则意味着它将具有 zero valuetime.Time,这将保存到 mongodb 中。在 mongodb 中,它的值为:

testtime: isodate("0001-01-01t00:00:00.000z")

要过滤掉这样的时间,在 go 中再次使用 time.time 的零值,如下所示:

filter := bson.m{
    "status":   "ready",
    "testtime": bson.m{"$ne": time.time{}},
}

如果您以其他方式插入文档,其中 testtime 可能是 null 或不存在,您可以这样解释:

filter := bson.M{
    "status": "Ready",
    "TestTime": bson.M{
        "$nin": []any{time.Time{}, nil},
    },
}

好了,本文到此结束,带大家了解了《查询在使用 Golang 与 MongoDB 时的零时区时刻》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>