1

我有一个 mongo 文档,如下所示:

{
        "_id" : ObjectId("59ccb655071d4c2ceebe190c"),
        "session_details" : [
                {
                        "session_start" : 1,
                        "session_complete" : 1,
                        "started_at" : ISODate("2017-09-28T08:42:19.770Z"),
                        "event_count" : 2
                },
                {
                        "session_start" : 1,
                        "session_complete" : 1,
                        "started_at" : ISODate("2017-09-28T08:53:08.618Z"),
                        "event_count" : 1
                },
                {
                        "session_start" : 1,
                        "session_complete" : 1,
                        "started_at" : ISODate("2017-09-28T09:19:42.726Z")
                }
        ],
        "session_id" : "12312312313123",
}

我正在更新最新的 session_deatils,如下所示:

    session=collection.find_one({"session_id":session_id})
    total_impression = len(session["session_details"])
    latest_session_details = session["session_details"][session_details-1]
    latest_session_started_at = latest_session_details.get("started_at")

然后我正在做如下更新:

collection.update({"session_details.started_at": latest_session_started_at }, {"$set":{"session_details.$.event_count":3}}) 

从上面你可以看到我两次访问数据库,是否可以使用单个查询更新文档?

提前致谢。

4

1 回答 1

1

如果event_count您要设置的位置始终缺少该字段,则可以执行以下操作:

collection.update({
    "session_id": session_id,
    "session_deatils.event_count": {
        $exists: false
    }
}, {
    "$set": {
        "session_deatils.$.event_count": 3
    }
})

如果不是这种情况,那么您当前的解决方案有点冗长,但最终是实现您想要的唯一方法。

围绕 MongoDB 下一版本的数组更新做了一些工作,但不幸的是,仍然不能解决您的问题:https ://jira.mongodb.org/browse/SERVER-27089

PS:您可能需要更正 to 的deatils拼写details

于 2017-09-28T21:19:33.500 回答