這是我的問題。我正在使用 gqlgen 庫來運行 GraphQL 服務器。在我的資料庫中,我有一個 MongoDB 檔案,如下所示:
{
"_id": ObjectID(...),
"somefield": "data",
"anArrayOfObjects": [
{
"field1": "value1",
"field2": "value2
},
...
]
}
我想要的是能夠僅將欄位解碼anArrayOfObjects為切片(可能看起來像[]MyObj,MyObj結構在哪里)。
(對于一點背景關系,我只想要這個欄位,因為陣列非常大并且它有自己的 GraphQL 決議器)。
這是我目前嘗試過的:
ObjectID, err := primitive.ObjectIDFromHex("someid")
// do some error check
opts := options.FindOne().SetProjection(
bson.D{{Key: "anArrayOfObjects", Value: 1}, {Key: "_id", Value: 0}},
)
myslice = []MyObj{}
err := coll.FindOne(ctx, bson.M{"_id": ObjectID}, opts).Decode(&myslice)
// err is "cannot decode document into []MyObj"
相反,如果我跑
result = primitive.D{} // or primitive.M{}
err := coll.FindOne(ctx, bson.M{"_id": ObjectID}, opts).Decode(&result)
// err is nil and result contains everything I want but not in the "ideal" data structure
做后者,我認為我可以遍歷result然后將所有內容映射到每個結構欄位(類似于這個答案)。但我的直覺是,可能有比這更好的方法。
提前致謝!
uj5u.com熱心網友回復:
您的查詢結果將是一個包含該anArrayOfObjects欄位下的陣列的檔案,而不僅僅是該欄位的陣列值。而且您無法將檔案解碼為 Go 切片,這就是錯誤訊息告訴您的內容。
因此解組為具有該欄位的結構:
var result struct{
MySlice []MyObj `bson:"anArrayOfObjects"`
}
err := coll.FindOne(ctx, bson.M{"_id": ObjectID}, opts).Decode(&result)
來自 MongoDB 的陣列將是result.MySlice.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530857.html
