2014-10-17 5 views
0

12리스트를 요소로 포함하는 r리스트가 있습니다. 각 목록에는 다른 목록과 비교되는 일부 요소 (i[0] ~ i[5])가 포함되어 있습니다. 고유 한 문서를 삽입하려고 했으므로 DB에 5 개의 문서를 가져와야합니다. 문서가 이미있는 경우 i[6]i[7]chr에 추가하십시오. rCouchDB에서 문서를 업데이트하는 방법

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 처음 두리스트는 동일한 필드 (i[5]-i[0])을 포함한다. 두 목록에 대한 최종 문서는이를 좋아한다 :

사전인가를 문서를 업데이트하고 목록에 추가 할 수 있습니다 방법
{ 
    "_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

+0

위의 업데이트 섹션을 참조하십시오. 자세한 내용이 필요하면 알려주십시오. – user977828

답변

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)