2014-10-17 166 views
0

我有一個列表r,其中包含12個列表作爲元素。每個列表包含一些元素(i[0]i[5]),這些元素與其他列表相同。 我只嘗試插入獨特的文檔,結果我應該在數據庫中獲得5個文檔。如果文件已經存在,則附加i[6]i[7]chr如何更新CouchDB中的文檔

import couchdb 

# $ sudo systemctl start couchdb 
# http://localhost:5984/_utils/ 

server = couchdb.Server() 
try: 
    db = server.create("test") 
except couchdb.http.ResourceConflict: 
    db = server["test"] 

r = [["Test", "A", "B01", 828288, 1, 7, 'C', 5], 
    ["Test", "A", "B01", 828288, 1, 7, 'T', 6], 
    ["Test", "A", "B01", 171878, 3, 8, 'C', 5], 
    ["Test", "A", "B01", 171878, 3, 8, 'T', 6], 
    ["Test", "A", "B01", 871963, 3, 9, 'A', 5], 
    ["Test", "A", "B01", 871963, 3, 9, 'G', 6], 
    ["Test", "A", "B01", 1932523, 1, 10, 'T', 4], 
    ["Test", "A", "B01", 1932523, 1, 10, 'A', 5], 
    ["Test", "A", "B01", 1932523, 1, 10, 'X', 6], 
    ["Test", "A", "B01", 667214, 1, 14, 'T', 4], 
    ["Test", "A", "B01", 667214, 1, 14, 'G', 5], 
    ["Test", "A", "B01", 667214, 1, 14, 'G', 6]] 

_id = None 
for i in r: 
    _id = str(i[5]) 
    doc = { 
     'type': i[0], 
     'name': i[1], 
     'sub_name': i[2], 
     'pos': i[3], 
     's_type': i[4], 
     '_id': _id, 
     'chr':[] 
    } 

    doc['chr'].append({ 
     "letter":i[6], 
     "no":i[7] 
    }) 

    a = db.save(doc) 

UPDATE 第一個兩個列表中r包含相同的字段(i[0]i[5])。這兩個列表的最終文件應該是這樣的:

{ 
    "_id": "7", 
    "_rev": "1-bc0b4e6f3aa855a486225f4a0dcd76c8", 
    "sub_name": "B01", 
    "name": "A", 
    "pos": 828288, 
    "s_type": 1, 
    "chr": [ 
     { 
      "letter": "C", 
      "no": 5 
     }, 
     { 
      "letter": "T", 
      "no": 6 
     } 
    ], 
    "type": "Test" 
} 

如何更新文檔並將其附加到列表字典?

+0

現在還不清楚,您能否提供更多信息? – avi 2014-10-17 08:34:33

+0

請參閱上面的更新部分。如果需要更多細節,請告訴我。 – user977828 2014-10-17 09:19:07

回答

0

這是最有效的解決方案嗎?

import couchdb 

# $ sudo systemctl start couchdb 
# http://localhost:5984/_utils/ 

server = couchdb.Server() 
db = server.create("test") 
# except couchdb.http.ResourceConflict: 
#db = server["test"] 

r = [["Test", "A", "B01", 828288, 1, 7, 'C', 5], 
    ["Test", "A", "B01", 828288, 1, 7, 'T', 6], 
    ["Test", "A", "B01", 171878, 3, 8, 'C', 5], 
    ["Test", "A", "B01", 171878, 3, 8, 'T', 6], 
    ["Test", "A", "B01", 871963, 3, 9, 'A', 5], 
    ["Test", "A", "B01", 871963, 3, 9, 'G', 6], 
    ["Test", "A", "B01", 1932523, 1, 10, 'T', 4], 
    ["Test", "A", "B01", 1932523, 1, 10, 'A', 5], 
    ["Test", "A", "B01", 1932523, 1, 10, 'X', 6], 
    ["Test", "A", "B01", 667214, 1, 14, 'T', 4], 
    ["Test", "A", "B01", 667214, 1, 14, 'G', 5], 
    ["Test", "A", "B01", 667214, 1, 14, 'G', 6]] 

# _id = None 
for i in r: 
    _id = str(i[5]) 
    doc = db.get(_id) 
    if doc is None: 
     doc = { 
      'type': i[0], 
      'name': i[1], 
      'sub_name': i[2], 
      'pos': i[3], 
      's_type': i[4], 
      '_id': _id, 
      'chr':[] 
     } 

     doc['chr'].append({ 
      "letter":i[6], 
      "no":i[7] 
     }) 

    else: 
     doc['chr'].append({ 
      "letter":i[6], 
      "no":i[7] 
     }) 

    db.save(doc)