项目不同的嵌入式结构,以相同的名称
问题描述:
我写执行这些任务的python脚本:与嵌入式文件 项目不同的嵌入式结构,以相同的名称
- 查询一个MongoDB的集合查询匹配 “U_” 公约
- 进口值通过REST API来的ServiceNow
问题:
嵌入式文档的结构不一致。 HOSTNAME字段存储在不同的结构中。
我需要将主机名作为u_hostname返回。如果它存在,我需要$ hostnames.name的值,如果存在,则需要$ hostname的值。
如何确定是否存在任何一个,并将其作为u_hostname返回?
结构1主机名存储为$ hostnames.name
{
"_id" : "192.168.1.1",
"addresses" : {
"ipv4" : "192.168.1.1"
},
"hostnames" : [
{
"type" : "PTR",
"name" : "example.hostname.com"
}
]
}
结构2主机名存储为$主机名
{
"_id" : "192.168.2.1",
"addresses" : {
"ipv4" : "192.168.2.1"
},
"hostname" : "helloworld.com",
}
脚本:
查询时仅会返回$ host的值名称,而不是$ hostname.name。
cmp = db['computers'].aggregate([
{"$project" : {
"_id":0,
"u_hostname": "$hostnames.name",
"u_hostname": "$hostname",
"u_ipv4": "$addresses.ipv4"
}}
])
答
您希望集合函数中包含$ unwind,$ group和$ setUnion运算符。它将允许你压扁hostnames.name列表,然后将它们与其他主机名进行合并。
“主机名”是一个元素数组吗? – styvane
不知道我是否理解正确,但我认为“主机名”是一组对象。正如您在结构1中看到的,“主机名”数组包含两个属性“名称”和“类型”。 – pengz
你总是有一个对象在数组中? – styvane