#mongodb
#mongodb
Вопрос:
У меня есть таблица, структурированная следующим образом:
db.l2vpn_fdb_database.findOne()
{
_id: ObjectId("5f5257f11324c04122714445"),
hostname: "spine01-drt-red",
l2vpn_fdb_database: {
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» для дальнейшей обработки.
Спасибо.
Ответ №1:
Вы можете использовать $filter
для получения сопоставленных объектов
db.collection.aggregate([
{
$project: {
l2vpn_fdb_database: {
$filter: {
input: "$l2vpn_fdb_database.MAC",
cond: {
$eq: [
"$$this.IfIndex",
"1631"
]
}
}
}
}
}
])
Рабочая игровая площадка Mongo
Комментарии:
1. знаете ли вы пример того, как это сделать с помощью «find»?
2. Если вам не нужны дубликаты mongoplayground.net/p/5o9QHEdtDvb это помогает. Но имейте в виду, чтобы использовать docs.mongodb.com/manual/reference/operator/projection /…
3. спасибо, а как насчет части имени хоста? допустим, у меня есть несколько имен хостов с одинаковым MacAddr (что возможно), как мне перечислить все те, у которых есть определенный MacAddr?
Ответ №2:
для имени хоста с 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']
}
}
}
])
Ответ №3:
Этот запрос может вам помочь.
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"
}
]
}
}