为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信