我有一个多级mongo数据库集合。我正在尝试使用PyMongo从中提取数据,但我一直收到错误消息:
TypeError:字符串索引必须为整数
我尝试了许多不同的方法,但始终得到相同的结果。我必须错过一些非常简单的东西,但似乎无法识别它。任何帮助,将不胜感激。
import pymongo
import json
server = pymongo.MongoClient('localhost')
db = server['testData']
inventory = db['testCollection']
db.inventory.insert_many([
{
"data_set1": [
{
"paramGroup1" : [
{
"dataItem1" : 14, "dataItem2" : 1233, "dataItem3" : 1234
}]
},
{
"paramGroup2" : [
{
"dataItem1" : 15, "dataItem2" : 1234, "dataItem3" : 1235
}]
}
]
},
{
"data_set2": [
{
"paramGroup1" : [
{
"dataItem1" : 16, "dataItem2" : 1254, "dataItem3" : 1111
}]
},
{
"paramGroup2" : [
{
"dataItem1" : 51, "dataItem2" : 9999, "dataItem3" : 2222
}]
}
]
},
])
cursor = db.inventory.find(
{'data_set1': {"$exists": 1}})
string_output = ''
for doc in cursor:
string_output = string_output + str(doc)
#print(str(doc))
jDumpsData = json.dumps(string_output)
print("jDumpsData = " + jDumpsData)
jLoadsData = json.loads(jDumpsData)
print("jLoadsData = " + jLoadsData)
testDataItem = jLoadsData['data_set1']['paramGroup2']['dataItem3']
在这种情况下,我期望data_set1-> paramGroup2-> dataItem3的值为1234。真的,我只想将dataItem3的值分配给变量,并在其他计算中使用它。
答案 0 :(得分:0)
如果您希望data_set1-> paramGroup2-> dataItem3的值为1234,则可以使用以下代码进行访问。您无需转储并加载json。 您的json数据包含多个json和列表,在这种情况下,调试将帮助您轻松找到简单的错误。
cursor = db.inventory.find(
{'data_set1': {"$exists": 1}})
data = list(cursor)
print(data[0]["data_set1"][1]["paramGroup2"][0]["dataItem3"])