使用 mgo Golang 从 MongoDB 个子文档数组中解组
Unmarshal from array of MongoDB subdocuments with mgo Golang
我想弄清楚如何从数组中获取单个子文档并将其解组为结构。
我的 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})
哪个returns
{"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 驱动程序。
因为你不是俘虏一个玩家,而是俘虏玩家。
就像 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)
我想弄清楚如何从数组中获取单个子文档并将其解组为结构。
我的 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})
哪个returns
{"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 驱动程序。
因为你不是俘虏一个玩家,而是俘虏玩家。 就像 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)