簡體   English   中英

在 mongo-go-driver 中為 .FindOne 創建過濾器

[英]Creating a filter in mongo-go-driver for .FindOne

我正在嘗試檢查一個集合以查看是否至少有一個文檔與一組特定的值匹配。

我試過在https://github.com/mongodb/mongo-go-driver#usage閱讀文檔,但我似乎在那里找不到太多幫助。 我對 MongoDB & Go 很陌生,我相信這更多是我缺乏經驗的問題。

這是我嘗試使用 mongo-go-driver 運行的來自 Studio 3T 的示例查詢:

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字段。

我希望 at 仍然至少返回一份文檔,但沒有顯示任何內容。 有沒有人對我做錯了什么(或者我可以如何做得更好)有一些提示、建議或指導?

不太確定,但是您是否嘗試過使用bson.M而不是bson.D

似乎它至少對我有用。

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

請參閱文檔以獲取更多信息。

另外,就像@owlwalks 所說的,你確定你在正確的收藏中嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM