2012-09-26 41 views
1

我有一個名爲login_info文件,它包含下列字段:在mongoengine從嵌入的文檔刪除值

class login_info(Document): 
    user_name = StringField(max_length=120) 
    password = StringField(max_length=120) 
    email = EmailField() 
    gender = StringField(max_length=120) 
    date_of_birth = DateTimeField() 
    visibility = StringField(max_length=120) 
    client_id = ObjectIdField(required=False) 
    location = ListField(EmbeddedDocumentField("Tracking"))` 

在上述領域location是一個嵌入式文件,它包含下列字段:

  • 時間

  • 緯度,

  • 經度

我想從滿足下列條件此嵌入文檔中刪除的值。

time < system_datetime

以下爲login_info文件示例數據:

{ 
    "_cls":"login_info", 
    "_id":ObjectId("5046f43c12d0592e3f59e25d"), 
    "_types":[ 
     "login_info" 
    ], 
    "date_of_birth":ISODate("2011-02-07T00:00:00 Z"), 
    "email":"[email protected]", 
    "expire":1346827684, 
    "gender":"male", 
    "issue":1346827324, 
    "key":"47d1e64e51dfa1cf99ce4a59e0c940", 
    "location":[ 
     { 
      "Latitude":"5615.3111", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"1236.711", 
      "time":ISODate("2012-09-13T12:24:36.051 Z") 
     }, 
     { 
      "Latitude":"000", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"3.70", 
      "time":ISODate("2012-09-25T18:30:57.756 Z") 
     }, 
     { 
      "Latitude":"11", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"1", 
      "time":ISODate("2012-09-26T10:25:29.157 Z") 
     }, 
     { 
      "Latitude":"11", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"1", 
      "time":ISODate("2012-09-26T10:40:58.895 Z") 
     }, 
     { 
      "Latitude":"11", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"1", 
      "time":ISODate("2012-09-26T10:54:08.361 Z") 
     }, 
     { 
      "Latitude":"11", 
      "_types":[ 
       "Tracking" 
      ], 
      "_cls":"Tracking", 
      "Longitude":"1", 
      "time":ISODate("2012-09-26T11:08:55.873 Z") 
     } 
    ], 
    "password":"jack", 
    "refresh_token":"22580a8f69", 
    "token":"bac8a5f863", 
    "user_name":"jack", 
    "visibility":"visible" 
} 
+0

你想只刪除「時間」字段?或者'time'小於'system_datetime'的整個'location'嵌入文件? –

+0

我想用新傳的json值更新位置嵌入式文檔 –

回答

3

如果你想從login_info文檔與MongoEngine刪除單個location嵌入文檔,這樣做:

// add 
loc1 = Tracking(time=datetime(2011, 11, 5, 0, 0, 0)) 
loc2 = Tracking(time=datetime(2012, 10, 5, 0, 0, 0)) 

login = login_info(user_name='Mark', location=[loc1, loc2]) 
login.save() 

// remove locations from the location list 
login.objects(title=user_name='Mark').update_one(pull__lt=datetime.now()) 

注:mongoengine 0.7.5有bug,所以你必須從https://github.com/MongoEngine/mongoengine下載最新版本

+0

它不起作用 –

+0

您是否從github下載/克隆了最新版本? –

+0

我更新了我的mongoengine版本。之前它是0.6.20,現在我更新,並得到0.7.5 usig pip安裝,但現在當我運行代碼在這個鏈接文件完全被刪除..http://pastebin.com/km7CmV9j –