我需要在Mongo数据库的对象数组中找到特定值的重复条目。我的结构看起来像这样:
type gameTemplate struct {
ID bson.ObjectId `bson:"_id" json:"id"`
GameCode string `bson:"gamecode" json:"gamecode"`
Players []player `bson:"players" json:"players"`
}
type player struct {
PlayerID bson.ObjectId `bson:"playerid" json:"playerid"`
Username string `bson:"username" json:"username"`
}
如果有新玩家加入游戏,我要检查以确保未使用其用户名。我使用这种方法检查重复的游戏代码(如果count
大于1,我知道存在一个游戏):
count, err := collection.Find(bson.M{"gamecode": entry.GameCode}).Limit(1).Count()
这很好用,但显然无法检查玩家数组中某个对象的username
值。我想我将不得不执行以下操作:检查数组的大小并遍历每个选项以查找重复项,但是我没有任何成功。
编辑
我正在运行最新版本的MongoDB,并且正在使用mgo.v2驱动程序。我要实现的目标流程看起来像这样:
玩家Y想加入游戏X。游戏X只能有一个“用户名”实例,但是相同的用户名可以出现在其他游戏中。
答案 0 :(得分:0)
您可以使用$elemMatch
collection.Find(bson.M{"gamecode": entry.GameCode},bson.M{"players": bson.M{"$elemMatch": bson.M{"playerid": playerid}}}).Limit(1).Count()