Проверьте наличие дубликатов в массиве объектов на Голанге с помощью MongoDB - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно найти повторяющиеся записи определенного значения в массиве объектов в базе данных 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 может быть только один экземпляр «имени пользователя», но это же имя пользователя может присутствовать в других играх.

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете использовать $ elemMatch

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