将嵌套的json添加到mongoDB

时间:2014-12-09 11:02:02

标签: python json mongodb

我想在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字段?

3 个答案:

答案 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 
    }],