我正在解决这个问题:
使用适当的MongoDB语句将新的键值对插入文档中。具体来说,请使用Python或Java创建函数或方法 它将从文件或标准输入流中读取JSON表示法的值对流,并将此文档插入到stocks集合中。您 还需要创建一个简单的应用程序支架来测试您的功能或方法。
我已经开发了代码,它可以让我输入信息。但是,它总是导致此错误,我不知道是什么原因引起的。
import json
from bson import json_util
from pymongo import MongoClient
connection = MongoClient('localhost', 27017)
db = connection['market']
collection = db['stocks']
def insert_document(document):
checker = True
try:
stars = "*" * 50+"\n"
print(stars)
document = input('Enter Your Document: ')
result = collection.insert_one(document)
stars = "*" * 50+"\n"
print ("\nSubmitted Document\n" + stars + document)
except ValidationError as ve:
abort(400, str(ve))
checker = False
stars = "*" * 50+"\n"
return checker+stars
def main():
myDocument = {"keyName": "test value data"}
print insert_document(myDocument)
main()
预期结果:
*****************************************************
Enter Your Document: {"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
Submitted Document
*****************************************************
{"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
True
*****************************************************
实际结果:
**************************************************
Enter Your Document: {"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
Traceback (most recent call last):
File "test.py", line 27, in <module>
main()
File "test.py", line 26, in main
print insert_document(myDocument)
File "test.py", line 19, in insert_document
except ValidationError as ve:
NameError: global name 'ValidationError' is not defined
答案 0 :(得分:0)
您的ValidationError消息是因为您在导入中没有引用ValidationError。 ValidationError不是pymongo会抛出的异常,因此您可以将其更改为更通用的
except Exception as e:
引发错误的原因是因为您在应插入JSON时尝试插入字符串。即使它看起来像JSON,也必须使用json.loads将其转换为JSON。
collection.insert_one(json.loads(document))