PyMongo检索数据库值

时间:2019-06-24 03:50:11

标签: pymongo

我有一个多级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的值分配给变量,并在其他计算中使用它。

1 个答案:

答案 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"])