使用MongoDB在Golang中检查对象数组中的重复项

时间:2018-10-31 02:51:43

标签: mongodb go mgo

我需要在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只能有一个“用户名”实例,但是相同的用户名可以出现在其他游戏中。

1 个答案:

答案 0 :(得分:0)

您可以使用$elemMatch

collection.Find(bson.M{"gamecode": entry.GameCode},bson.M{"players": bson.M{"$elemMatch": bson.M{"playerid": playerid}}}).Limit(1).Count()