如何查询MongoDB中的复杂数据
我的表格结构如下: db.l2vpn_fdb_数据库.findOne()如何查询MongoDB中的复杂数据,mongodb,Mongodb,我的表格结构如下: db.l2vpn_fdb_数据库.findOne() { _id:ObjectId(“5f5257f11324c04122714445”), 主机名:“spine01 drt红色”, l2vpn_fdb_数据库:{ MAC:[ { IfIndex:“1631”, MacAddr:“00-00-0C-07-AC-01”, SrvID:“1”, VsiName:“EVPN”, }, { IfIndex:“0”, MacAddr:“00-00-0C-07-AC-02”, SrvID
{
_id:ObjectId(“5f5257f11324c04122714445”),
主机名:“spine01 drt红色”,
l2vpn_fdb_数据库:{
MAC:[
{
IfIndex:“1631”,
MacAddr:“00-00-0C-07-AC-01”,
SrvID:“1”,
VsiName:“EVPN”,
},
{
IfIndex:“0”,
MacAddr:“00-00-0C-07-AC-02”,
SrvID:“0”,
VsiName:“EVPN”,
},
{
IfIndex:“1631”,
MacAddr:“00-00-0C-07-AC-0A”,
SrvID:“1”,
VsiName:“EVPN”,
},
],
},
}
我想搜索“MacAddr”对象,你能帮我根据上面的内容找出答案吗?所以本质上我希望能够解析数据库中的MacAddress,假设它在那个里,并且能够获取“IfIndex”进行进一步处理
谢谢。您可以使用
$filter
获取匹配的对象
db.collection.aggregate([
{
$project: {
l2vpn_fdb_database: {
$filter: {
input: "$l2vpn_fdb_database.MAC",
cond: {
$eq: [
"$$this.IfIndex",
"1631"
]
}
}
}
}
}
])
使用对于使用macAddr的主机名,请尝试这样做
db.collection.aggregate([
{
$project: {
l2vpn_fdb_database: {
$filter: {
input: "$l2vpn_fdb_database.MAC",
cond: {
$eq: [
"$$this.IfIndex",
"1631"
]
}
}
},
hostname:{
$eq:['$hostname','spine01-drt-red']
}
}
}
])
这个查询可以帮助您
b.l2vpn_fdb_database.findOne({
"l2vpn_fdb_database.MAC.MacAddr": "00-00-0C-07-AC-01",
},
{
"l2vpn_fdb_database.MAC.$": 1
})
结果是相同的文档,数组中只有1个元素
结果:
{
"_id": ObjectId("5f5257f11324c04122714445"),
"l2vpn_fdb_database": {
"MAC": [
{
"IfIndex": "1631",
"MacAddr": "00-00-0C-07-AC-01",
"SrvID": "1",
"VsiName": "EVPN"
}
]
}
}
你知道一个如何使用“查找”的例子吗?如果你不需要双倍的帮助。但是要注意使用谢谢,主机名部分呢?假设我有多个主机名具有相同的MacAddr(这是可能的),我如何列出所有具有特定MacAddr的主机名?