PyMongo: использование $ push для обновления существующего документа со ссылкой на другой документ - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть коллекция команд и коллекция игроков .Я пытаюсь вставить документы в коллекцию groups * из коллекции ** Players , используя $ push.

Вот модели данных для обоих:

Команды:

        {
            "team_id": 1,
            "team_name": team_name,
            "general_manager": general_manager,
            "players": [

            ]
        }

Игроки:

        {
            "_id": "5c076550c779ce4fa2d4c9fd"
            "first_name": first_name,
            "last_name": last_name,
        }

Вот код, который я использую:

        player = players.find_one({ "$and": [
        {"first_name": first_name},
        {"last_name": last_name}] })


    teams.update(
        {"team_name": team_name},
        {"$push":
             {"players": {
                 "$ref": "players",
                 "$id": player["_id"],
                 "$db": db
             }}})

При выполнении этого я получаю следующее сообщение об ошибке:

pymongo.errors.WriteError: Найдено поле $ id без $ ref перед ним, что недопустимо.

Что я делаю не так?Заранее спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Я немного упростил ваши запросы.Попробуйте ниже (объяснение в комментариях)

//Locate the player record
player = players.find_one({"first_name": first_name,"last_name": last_name})

//push this into the "players" array of the team
teams.update_one({"team_name": team_name},
    {"$push":  {"players":  player } } 
)

Я использовал update_one вместо обновления, так как я предполагаю, что вам нужно обновить только один документ в коллекции команд.

...