我正在使用Python脚本查询MongoDB集合。集合包含具有不同结构的嵌入文档。在
我试图简单地“$unfind”包含在多个文档中的数组。但是,数组并不是在所有文档中。在
这意味着只返回包含该字段的文档,其他文档将被忽略。我使用的是pymongo2.6,所以我无法使用preserveNullAndEmptyArrays
,因为它是mongodb3.2中的新功能
有解决办法吗?沿着“如果磁场路径存在,就展开”这句话。在
关于文档和代码的结构在这个单独的但是我之前问过的related question中有详细的概述。在
问题:
我正在尝试“$unfind”值$hostnames.name
。但是,由于路径并不存在于所有文档中,这将导致多个被忽略的文档。在
结构1主机名存储为$主机名.name
{
"_id" : "192.168.1.1",
"addresses" : {
"ipv4" : "192.168.1.1"
},
"hostnames" : [
{
"type" : "PTR",
"name" : "example.hostname.com"
}
]
}
结构2主机名存储为$Hostname
^{pr2}$脚本
cmp = db['computers'].aggregate([
{"$project": {
"u_hostname": {
"$ifNull": [
"$hostnames.name",
{ "$map": {
"input": {"$literal": ["A"]},
"as": "el",
"in": "$hostname"
}}
]
},
"_id": 0,
"u_ipv4": "$addresses.ipv4"
}},
{"$unwind": "$u_hostname"}
])
我缺少所有“主机名”数组为空的文档。在
这是仍然丢失的文件的结构。在
结构3
{
"_id" : "192.168.1.1",
"addresses" : { "ipv4" : "192.168.1.1" },
"hostnames" : [], }
}
我们仍然可以通过使用^{} 运算符来保留所有缺少数组字段的文档,并使用逻辑^{} 处理为新计算的字段赋值。在
这里的条件是^{} ,如果字段是
[None]
,则返回True;如果条件表达式的计算结果为False,则返回False。在相关问题 更多 >
编程相关推荐