我是一个像下面这样的mongo docuemnt:
{
"_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}})
从上面你可以看到我两次访问数据库,是否可以使用单个查询更新文档?
提前致谢。
答案 0 :(得分: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
P.S。:您可能需要更正deatils
到details
的拼写。