2017-04-14 1 views
0

SQL 데이터를 mongodb로 가져 오는 동안 임베디드 배열로 테이블을 병합했지만 구현하는 동안 '키 오류'라는 구문 오류가 발생합니다. 다음은 제 코드입니다.pymongo : OrderedDict에서 임베디드 배열 생성 중 오류 발생

import pyodbc, json, collections, pymongo, datetime 

arrayCol =[] 
mongoConStr = 'localhost:27017' 
sqlConStr = 'DRIVER={MSSQL-NC1311};SERVER=tcp:172.16.1.75,1433;DATABASE=devdb;UID=qauser;PWD=devuser' 
mongoConnect = pymongo.MongoClient(mongoConStr) 
sqlConnect = pyodbc.connect(sqlConStr) 
dbo = mongoConnect.eaedw.ctArrayData 
sqlCur = sqlConnect.cursor() 
sqlCur.execute('''SELECT M.fldUserId ,TRU.intRuleGroupId ,TGM.strGroupName FROM TBL_USER_MASTER M 
     JOIN TBL_RULEGROUP_USER TRU ON M.fldUserId = TRU.intUserId 
     JOIN tbl_Group_Master TGM ON TRU.intRuleGroupId = TGM.intGroupId 
      ''') 
tuples = sqlCur.fetchall() 
for tuple in tuples: 
    doc = collections.OrderedDict() 
    doc['fldUserId'] = tuple.fldUserId 
    doc['groups.gid'].append(tuple.intRuleGroupId) 
    doc['groups.gname'].append(tuple.strGroupName) 
    arrayCol.append(doc) 

mongoImp = dbo.insert_many(arrayCol) 

sqlCur.close() 
mongoConnect.close() 
sqlConnect.close() 

여기서, I는 배열의 하위 문서로 gidgroupname를 개최 포함 배열 이름 groups 만들려고 하였다.
append을 사용하는 동안 오류가 발생하며, 임베디드 배열없이 성공적으로 실행됩니다. 배열 정의에 오류가 있습니까?

답변

0

존재하지 않는 목록에는 추가 할 수 없습니다. append를 호출하면 doc [ 'groups.gid'] 및 doc [ 'groups.gname']에는 아무런 가치가 없습니다. 이 문제를 해결해도 PyMongo는 "groups.gid"와 같은 키가있는 문서를 삽입하는 것을 금지합니다. 이 작업을 수행 할 생각입니다.

for tuple in tuples: 
    doc = collections.OrderedDict() 
    doc['fldUserId'] = tuple.fldUserId 
    doc['groups'] = collections.OrderedDict([ 
     ('gid', tuple.intRuleGroupId), 
     ('gname', tuple.strGroupName) 
    ]) 
    arrayCol.append(doc) 

정말 만들려는 스키마를 기준으로 추측하고 있습니다.

관련 문제