我正在尝试检查一个集合,以查看是否至少有一个文档与一组特定值匹配。
我尝试阅读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
字段。
我希望仍然至少返回一个文档,但是没有任何显示。有人对我做错了什么(或者也许我可以做得更好)有任何提示,建议或指导吗?
答案 0 :(得分:1)
不太确定,但是您尝试使用bson.M
而不是bson.D
吗?
似乎至少对我有用。
query := &bson.M{
"event.eventType": "OSR",
"context.vehicleId": 919514,
}
有关更多信息,请参阅docs。
就像@owlwalks所说的那样,您确定您在正确的收藏夹中吗?