2017-09-28 35 views
1

我HABE一个蒙戈docuemnt如下:更新与新属性嵌入文档(在最新的阵列项目)在MongoDB中像

{ 
     "_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}}) 

由于从上面你可以看到我打DB两次,是有可能使用单个查询更新文档?

在此先感谢。

回答

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:您可能要纠正的deatils拼法details