【问题标题】:Add a nested json to mongoDB将嵌套的 json 添加到 mongoDB
【发布时间】:2015-02-07 06:00:01
【问题描述】:

我想在 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”字段。如何将所有行连接到推文字段?

【问题讨论】:

    标签: python json mongodb


    【解决方案1】:

    最后我找到了一个解决方案,以便在两个 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】:
      "abc": [{
              type: mongoose.Schema.Types.Mixed 
          }],
      

      【讨论】:

        【解决方案3】:

        最后一行的语法不正确。

        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)
        

        【讨论】:

        • 好的,但这不是嵌套的 json 文件。
        • 好的,但是我想不出如何克服 json 模板中的语法错误。此外,在第二行。
        • 是否可以在第一个循环中创建第一个字段用户名,并在第二个循环中添加数据字段?
        猜你喜欢
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多