在 MongoDB 中返回 None 的字典样式访问

Dictionary style access returning None in MongoDB

我一直在尝试访问 mongodb 中的数据库,然后将特定获取的数据修改为 键值 对以供进一步发布。虽然,我的代码适用于其他集合。但是,这给了我一些错误。

1: Here is the snippet of my code which was giving the first error:

kpi = sample["kpi"]
    for proc in kpi:
        volume_used = int(float(kpi[proc]["percent"][:-1]))
        volume_free = 100 - volume_used
        volume_name = kpi[proc]["folder"]

        vol_first = [volume_name, volume_used]
        vol_second = [volume_name, volume_free]
        data_first.append(vol_first)
        data_second.append(vol_second)

    value_first.append({"key": "volume used", "values": data_first})

    value_first.append({"key": "volume free", "values": data_second})


    disk_data.append({
        "key": dev["device_name"] + "," + dev["ipaddr"],
        "values": value_first
    })
    print disk_data

据此,我得到的错误是这样的:

File "stats_server.py", line 1547, in getD3DiskData_columnchart
"key": dev["device_name"] + "," + dev["ipaddr"],
TypeError: unsupported operand type(s) for +: 'float' and 'str'

然后,我将float格式的device_name修改为string

2: Modified code:

kpi = sample["kpi"]
    for proc in kpi:
        volume_used = int(float(kpi[proc]["percent"][:-1]))
        volume_free = 100 - volume_used
        volume_name = kpi[proc]["folder"]

        vol_first = [volume_name, volume_used]
        vol_second = [volume_name, volume_free]
        data_first.append(vol_first)
        data_second.append(vol_second)

    value_first.append({"key": "volume used", "values": data_first})

    value_first.append({"key": "volume free", "values": data_second})


    disk_data.append({
        "key": str(dev["device_name"]) + "," + dev["ipaddr"],
        "values": value_first
    })
    print disk_data

然后,我开始收到这个错误。

 File "stats_server.py", line 1530, in getD3DiskData_columnchart
kpi = sample["kpi"]
TypeError: 'NoneType' object has no attribute '__getitem__'

kpi = sample["kpi"] returns 来自特定集合的文档。

我用来获取数据的查询是:

disk_util_coll = db[kpi_meta]

    disk_docs = disk_util_coll.find_one()
    sample = disk_docs

其中,kpi_meta是集合的名称。

文档 kpi 将包含我需要的数据:

"kpi" : {
            "none" : {
                    "usage" : "0",
                    "folder" : "/run/shm",
                    "percent" : "0%",
                    "free" : "246M",
                    "dev" : "none"
            },
            "tmpfs" : {
                    "usage" : "256K",
                    "folder" : "/run",
                    "percent" : "1%",
                    "free" : "99M",
                    "dev" : "tmpfs"
            },
            "/dev/sda1" : {
                    "usage" : "1.2G",
                    "folder" : "/",
                    "percent" : "74%",
                    "free" : "404M",
                    "dev" : "/dev/sda1"
            },
            "udev" : {
                    "usage" : "4.0K",
                    "folder" : "/dev",
                    "percent" : "1%",
                    "free" : "238M",
                    "dev" : "udev"
            }

我们将不胜感激。

让我知道,如果我应该从我身边提供更多东西。

谢谢

错误信息:

TypeError: 'NoneType' object has no attribute '__getitem__'

表示"sample"是None。这意味着您的 find_one 查询没有 return 文档。也就是说,查询与集合中的任何文档都不匹配。在尝试访问其字段之前检查 find_one() return 是一个文档。