亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 mgo Golang 從 MongoDB 子文檔數組中解組

使用 mgo Golang 從 MongoDB 子文檔數組中解組

Go
拉風的咖菲貓 2023-05-15 14:46:51
我想弄清楚如何從數組中獲取單個子文檔并將其解組為結構。我的 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)


查看完整回答
反對 回復 2023-05-15
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號