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

时间:2019-07-02 17:09:37

标签: mongodb go

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

我尝试阅读https://github.com/mongodb/mongo-go-driver#usage上的文档,但似乎在该文档中找不到太多帮助。我对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字段。

我希望仍然至少返回一个文档,但是没有任何显示。有人对我做错了什么(或者也许我可以做得更好)有任何提示,建议或指导吗?

1 个答案:

答案 0 :(得分:1)

不太确定,但是您尝试使用bson.M而不是bson.D吗?

似乎至少对我有用。

query := &bson.M{
  "event.eventType": "OSR",
  "context.vehicleId": 919514, 
}

有关更多信息,请参阅docs

就像@owlwalks所说的那样,您确定您在正确的收藏夹中吗?