簡體   English   中英

如何查詢MongoDB的復雜數據

[英]How to query MongoDB for complex data

我有一個表結構如下:

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”以進行進一步處理。

謝謝你。

您可以使用$filter來獲取匹配的對象

db.collection.aggregate([
  {
    $project: {
      l2vpn_fdb_database: {
        $filter: {
          input: "$l2vpn_fdb_database.MAC",
          cond: {
            $eq: [
              "$$this.IfIndex",
              "1631"
            ]
          }
        }
      }
    }
  }
])

工作Mongo 游樂場

對於帶有 macAddr 的 Hostname 試試這樣,

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"
        }
      ]
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM