在 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 是一个文档。
我一直在尝试访问 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 是一个文档。