Мне нужно найти повторяющиеся записи определенного значения в массиве объектов в базе данных 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
объекта в массиве игроков. Я думаю, что мне нужно было бы сделать что-то вроде проверки размера массива и перебрать каждую опцию, чтобы найти дубликат, но я не добился какого-либо успеха.
EDIT
Я использую последнюю версию MongoDB и использую драйвер mgo.v2 для go. Поток того, чего я пытаюсь достичь, выглядит примерно так:
Игрок Y хочет присоединиться к игре X. В игре X может быть только один экземпляр «имени пользователя», но это же имя пользователя может присутствовать в других играх.