Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用pymongo从csv高效加载集合数组_Mongodb_Csv_Pymongo - Fatal编程技术网

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

Mongodb 使用pymongo从csv高效加载集合数组,mongodb,csv,pymongo,Mongodb,Csv,Pymongo,csv文件有几个字段,但这里只关注两个字段:ID和code。可以有重复项(多行具有相同的ID和code值。目标是获得一个类似 { "_id" : ObjectId("5001"), "CODE" : [ code1 , code2 , code3 ], "ID" : "10001" } { "_id" : ObjectId("5002"), "CODE" : [ code3 ], "ID" : "10002" } { "_id" : ObjectId("5003"), "CODE" :

csv文件有几个字段,但这里只关注两个字段:
ID
code
。可以有重复项(多行具有相同的
ID
code
值。目标是获得一个类似

 {
"_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
不是一个选项)。我当前的方法是创建唯一
ID
值的dict
\u
,然后创建一个索引集合:

 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

你能显示CSV的标题行吗?事实上,你不需要pymongo来做这件事。最有效的方法是将CSV减少到你需要的字段并在上面使用。如果你显示标题行,我很乐意为你提供一个awk脚本,它可以有效地处理非常大的文件。我添加了一些数据,假设awk将请删除相关栏目。谢谢。