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