我想在mongodb集合中插入一个嵌套的json文件。文件模板如下:
{"username": name,
"data"{
"id":id
"Date":date
"text":text
}
}
编辑:我想将上面的json文件添加到mongo集合中。我想在第一个循环中添加第一个字段用户名(对于onlyfiles中的文件)并在第二个循环中连接所有行信息(对于myscv中的行)
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ] // list of csv files(text)
for files in onlyfiles:
name = files.split('_') // name of the file also the username
mycsv = csv.reader(open(mypath+files)) // read the file
my_data = {"username": name[0],
"data":{}
} //add the first fields to json
for row in mycsv: // for every line in csv file
'_id':row[0], //concatenate to my_data
'Date':row[1],
'text':row[2]
}
} // concatenate to my_data
collection.insert(my_data)
我希望数据包含每个csv文件包含的行。我怎么能这样做?
编辑:我设法使用以下代码在循环中执行嵌套json:
for files in onlyfiles:
name = files.split('_')
mycsv = csv.reader(open(mypath+files))
my_data = {"username": name[0],
"tweets":[]
}
for row in mycsv:
text = row[2]
data = {
"_id":row[0],
"Date":row[1],
"text":row[2]
}
my_data["tweets"].append(data) //my_data["tweets"].append(data)
print my_data
然而,就像现在一样,它只是将csv的最后一行添加到“tweets”字段。如何将所有行连接到tweets字段?
答案 0 :(得分:2)
最后一行的语法不正确。
collection.insert( {“username”:name [0]} ,{'_ id':row [0],'Date':row [1],'text':row [ 2]})
只插入用户名部分,其他参数不会。
您的模板json没有第二个数据的密钥:
{"username": name
{
'id':id,
'Date':date,
'text':text
}
}
应该是这样的:
my_data = {"username": name,
"data":{
'id':id,
'Date':date,
'text':text
}
}
collection.insert(my_data)
答案 1 :(得分:0)
最后,我找到了一个解决方案,以便在两个for循环中创建一个嵌套的json。我的代码看起来像:
for files in onlyfiles:
name = files.split('_')
mycsv = csv.reader(open(mypath+files))
my_data = {"username": name[0],
"tweets":[]
}
tweets = []
for row in mycsv:
text = row[2]
data = {
"_id":row[0],
"Date":row[1],
"text":row[2]
}
tweets.append(data)
my_data["tweets"].append(tweets)
collection.insert(my_data)
答案 2 :(得分:-1)
"abc": [{
type: mongoose.Schema.Types.Mixed
}],