Golang从MongoDB查询时排除未初始化的time.Time零值
解决MongoDB查询排除未初始化TestTime字段的问题
你需要更新查询过滤器,同时排除TestTime字段缺失和TestTime为time.Time零值的文档,具体实现如下:
time.Time的零值对应MongoDB中的时间是1970-01-01T00:00:00Z,我们需要构造过滤器同时满足两个条件:
- 确保TestTime字段存在(使用
$exists操作符) - 确保TestTime字段的值大于零值时间(使用
$gt操作符)
更新后的过滤器代码
zeroTime := time.Unix(0, 0).UTC() filter := bson.M{ "status": "Ready", "TestTime": bson.M{ "$exists": true, "$gt": zeroTime, }, }
完整查询代码示例
zeroTime := time.Unix(0, 0).UTC() filter := bson.M{ "status": "Ready", "TestTime": bson.M{ "$exists": true, "$gt": zeroTime, }, } 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
逻辑说明
$exists: true:过滤掉不存在TestTime字段的文档$gt: zeroTime:过滤掉TestTime被初始化为time.Time默认零值的文档
内容的提问来源于stack exchange,提问作者EagerLearner
相关产品推荐
相关产品推荐

