2014-10-17 169 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)