所以我有一个非常简单的 struct ,它持久化在MongoDB中

type Test struct {
    ID                  string                            `bson:"_id"`
    Status              string                            `bson:"status"`
    TestTime            time.Time                         `bson:"TestTime"`
}

在检索时,我希望确保没有检索到其TestTime未初始化的任何值,即排除缺少的/零等效值的时间.

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 struct 插入它们,其中您没有更改TestTime字段,这意味着它将具有time.Timezero value,这将被保存到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},
    },
}

Mongodb相关问答推荐

从两个相连的文件中获取电话和邮箱的渠道是什么?

获取文档字段名并将其作为嵌套字段添加到聚合中

在服务器上部署后端时判断??=默认判断

聚合管道可以用于更新数据库中的文档吗?

DTO 验证适用于 POST,但不适用于 PUT

查询有关 Go 项目中对象数组的 MongoDb 集合

从 mongodb Golang 检索时判断零等效时间.时间

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

根据状态过滤 mongoDb 中的结果

使用 mongodb 时是否需要规范化数据库?

PHP 无法加载动态库 (mongo.so)

MongoDB 聚合 $divide 计算字段

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

如何在 mongo JavaScript shell 中中止查询

MongoDb:如何将附加对象插入对象集合?

Mongodb KeyFile 太开放权限

如何在java中删除mongodb集合中的所有文档

MongoDB备份计划

如何在mongoose的嵌套填充中 Select 特定字段

mongoose中的 Date.now() 和 Date.now 有什么区别?