当嵌套字典键发生变化时,我如何使用嵌套字典查询mongodb文档



我正在使用mongoengine使用ODM查询数据并将其保存到我的mongo数据库中。我有一个名为interfaces的属性文档,其中包含另一个字典作为其值。

示例:

attr1: value
attr2: value
interfaces:
{
interface1: {'ip': 1.2.3.4, test:test2}
interface2: {'ip': 2.3.4.5, test:test3}
.
.
.
}

每个文档在接口属性下可以有数百个接口。

我正在寻找一种方法来测试"1.2.3.4"是否在文档的任何接口下。

我发现使用document.objects()并循环浏览所有记录,如下所示:

records = document.objects()
for key in records.interfaces.keys():
if records.interfaces[key]['ip'] == “1.2.3.4”:
dosomething

但最终该集合将有1000多个文档,这似乎是一个缓慢的解决方案。有没有办法直接从mongodb查询它?

谢谢你的帮助!

你不能。mongodb的本质是一个键、值对存储。如果不知道关键字,就无法查找值。

我建议按照以下思路重新设计你的模式:

attr1: value
attr2: value
interfaces:
[
{'interface_number': 1, 'ip': 1.2.3.4, test:test2},
{'interface_number': 2, 'ip': 2.3.4.5, test:test3},
.
.
.
]

最新更新