Проверьте наличие дубликатов в массиве объектов на Голанге с помощью 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()
Другие вопросы по тегам