在 mongo-go-driver 中为 .FindOne 创建过滤器

我正在尝试检查集合以查看是否至少有一个文档与一组特定值匹配。

我对 MongoDB 和 Go 还很陌生,我相信这更多是我缺乏经验的问题。

以下是来自 Studio 3T 的示例查询,我尝试使用 mongo-go-driver 运行它:

db.getCollection("events").find(

    { 

        "event.eventType" : "OSR", 

        "context.vehicleId" : NumberInt(919514), 

        "ts" : {

            "$gte" : ISODate("2019-06-21T21:38:43.022+0000")

        }

    }

).limit(1);

看来该context.FindOne方法会做我想要的事情(并且消除了对 的需要.limit(1))。我认为可以直接将其“移植”到 Go 和 mongo-go-driver。


我可以让这项工作正常进行,例如我有以下内容可以找到所有 OSR:


var query = &bson.D{

        {"event.eventType", "OSR"},

    }


result := bson.D{}

e := collection.FindOne(context.TODO(), query).Decode(&result)

这将返回给我一份文件。现在,如果我想包含该vehicleId值,我会将其更新query为:


var query = &bson.D{

        {"event.eventType", "OSR"},

        {"context.vehicleId", 919514}, 

    }

没有文件被退回。我还没有费心去扩展query该ts领域。


我预计至少仍会返回一份文档,但什么也没有显示。有人对我做错的事情有一些提示、建议或指导吗(或者我怎样才能做得更好)?


温温酱
浏览 140回答 1
1回答

开满天机

不太确定,但是你尝试过bson.M用 代替 吗bson.D?看来它至少对我有用。query := &bson.M{  "event.eventType": "OSR",  "context.vehicleId": 919514, }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go