我想弄清楚如何從數組中獲取單個子文檔并將其解組為結構。我的 mongo 文檔如下所示:{ "_id" : ObjectId("abc123"), "gamecode" : "abc123" "players" : [ { "playerid" : ObjectId("abc123"), "username" : "test", }, { "playerid" : ObjectId("abc456"), "username" : "test2" }] }我有一個播放器結構,如下所示:type Player struct { PlayerID bson.ObjectId `bson:"playerid" json:"playerid"` Username string `bson:"username" json:"username"`}從 mongo 命令行我可以做一個db.games.find(({"players.playerid": ObjectId('abc123')}, {"_id": 0, "players.$":1})哪個返回{"players" : [{ "playerid" : ObjectId("abc123"), "username" : "test"}]}但是我很難弄清楚如何在 Go 中實現相同的功能,以便我從查詢結果中獲得一個填充的播放器結構。我一直在玩弄下面代碼的不同配置,但它總是導致一個空結構。我在這里錯過了什么?player := Player{}collection.Find(bson.M{"players.playerid": bson.ObjectIdHex(pid)}).Select(bson.M{"_id": 0, "players.$": 1}).One(&player)我正在運行最新的 MongoDB 版本,并且正在使用用于 Go 的 mgo.v2 驅動程序。
1 回答

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
這是因為您不捕獲單個玩家,而是捕獲玩家。就像來自 mongo 命令的響應:
{"players" : [{ "playerid" : ObjectId("abc123"), "username" : "test"}]}
聽起來你可以抽象一個game
type Game struct {
Players []Player `bson:"players"`
}
你的電話將是&game
var game Game
collection.Find(bson.M{"...").One(&game)
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消