使用pymongo从csv高效地加载集合数组

时间:2015-04-12 12:24:40

标签: mongodb csv pymongo

csv文件包含多个字段,但这里只有两个字段:IDCODE。可能存在重复项(多行具有相同的IDCODE值。目标是获取类似

的集合
 {
"_id" : ObjectId("5001"),
"CODE" : [ code1 , code2 , code3 ],
"ID" : "10001"
 }
 {
"_id" : ObjectId("5002"),
"CODE" : [ code3 ],
"ID" : "10002"
 }
 {
"_id" : ObjectId("5003"),
"CODE" : [ code2 , code3 ],
"ID" : "10003"
 }

其中CODE数组包含唯一元素,并且没有重复的ID文档。

csv文件很大(cut | sort | uniq不是一个选项)。我目前的方法是创建一个唯一_u值的ID字典,然后创建一个索引集合:

 for ID in _u:
     ID_obj = { "ID"   : ID , 
                "CODE" : [] }
     z = db.my_collection.insert( ID_obj )

 z = db.my_collection.ensure_index( "ID" , unique = True )

然后我遍历csv文件的行,确保CODE数组只保留唯一值:

 z = db.my_collection.update({ "ID" : ID } , {"$addToSet":{ "CODE" : csv_code_value }}, True )

将csv数据加载到my_collection的最有效方法是什么?

csv数据本身有00列,但相关结构是:

 ID,CODE,DESC,DATE
 10003,code2,second description,10/7/2010
 10001,code1,first description,10/1/2010
 10003,code3,third description,10/8/2010
 10003,code3,third description,10/9/2010
 10001,code1,first description,10/2/2010
 10001,code1,first description,10/3/2010
 10001,code2,second description,10/4/2010
 10002,code3,third description,10/6/2010
 10001,code3,third description,10/5/2010

0 个答案:

没有答案