Проверьте наличие дубликатов в массиве объектов на Голанге с помощью MongoDB
Мне нужно найти повторяющиеся записи определенного значения в массиве объектов в базе данных 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 для go. Поток того, чего я пытаюсь достичь, выглядит примерно так:
Игрок Y хочет присоединиться к игре X. Игра X может иметь только один экземпляр "username", но это же имя пользователя может присутствовать в других играх.
1 ответ
Вы можете использовать $elemMatch
collection.Find(bson.M{"gamecode": entry.GameCode},bson.M{"players": bson.M{"$elemMatch": bson.M{"playerid": playerid}}}).Limit(1).Count()