问题描述
我正在使用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}
.
.
.
}
每个文档在interfaces属性下可以具有数百个接口。
我正在寻找一种测试'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的本质是键,值对存储。您无法在不知道键的情况下查找值。
我建议按照以下方式重新设计架构:
Symfony4