PyMongo:使用$ push通过引用另一个文档来更新现有文档

时间:2018-12-05 06:38:55

标签: python mongodb push pymongo

我有一个团队收藏和一个玩家收藏。我正在尝试使用$ push将文档从** players 集合中的 teams *集合中插入。

以下是这两个数据模型:

团队:

        {
            "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 :(得分:0)

我简化了您的查询。请尝试以下(注释中的解释)

//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而不是更新,因为我假设您只需要更新team集合中的一个文档即可。