如何将新元素插入现有的mongodb并从json文件更新现有文档?

时间:2015-01-12 12:17:25

标签: python json mongodb

我有关于python和mongodb的问题。我有一个现存的mongodb wh和一个集合basicdata。我想通过键“whID”将json文件合并到现有的mongodb中。我的代码如下:

import json, glob, codecs
from pymongo import MongoClient

directory = 'json/test/211.json'
client = MongoClient("localhost", 27017)
db = client.wh

jsonFiles = glob.glob(directory)
for file in jsonFiles:
     fwhID = file[10:13] #get the file name as whID in a stupid way
     with codecs.open(file,'r',errors='ignore',encoding='utf-8') as json_file:
          json_data = json.load(json_file)
          db.basicdata.update({"whID": fwhID },json_data, {upsert: true})
          print("Processing Json_data: ",file)
     json_file.close()

但我收到如下错误消息:

    db.basicdata.update({"whID": fwhID },json_data, {upsert: true})
NameError: name 'true' is not defined

任何人都可以帮助我吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您正在使用python连接到Mongodb。在python中,true为True,在mongodb中为true

并更改

db.basicdata.update({"whID": fwhID },json_data, {upsert: true})

db.basicdata.update({"whID": fwhID },json_data, upsert= true)

答案 1 :(得分:0)

我只修改了一行代码如下: 原始

db.basicdata.update({"whID": fwhID },json_data, {upsert: true})

更改为

db.basicdata.update( {"whID" : fwhID },{"$set":json_data}, upsert= True)

然后它工作! db.basicdata.update({“whID”:fwhID},{“$ set”:json_data},upsert = True) {“$ set”:json_data}会将dict放入现有文档并匹配“whID”键。