【问题标题】:MongoDB return distinct values based on conditionMongoDB 根据条件返回不同的值
【发布时间】:2021-07-13 02:37:31
【问题描述】:

当搜索 details.ap_name 等于 EVPN 时,我尝试使用 MongoDb 返回 details.sub_ap_name 的不同值,但是我的搜索返回 details.sub_ap_name 的所有唯一值

这是我当前查询的样子。我也尝试了一些聚合搜索,但这些也不适用于我。有人可以告诉我我可能做错了什么吗?

db['test-data'].distinct("details.sub_ap_name",{"details.ap_name": "EVPN"})

这是我的数据集

{ 
    "_id" : ObjectId("101"), 
    "details" : [
        {
            "run_date" : "2021-04-18",
            "ap_name" : "EVPN",
            "sub_ap_name" : "EVPN TOR"
            
           
        },
        {
              "run_date" : "2021-04-18",
              "ap_name" : "EVPN",
              "sub_ap_name" : "EVPN Mobility"
             
             
        },
        {
            "run_date" : "2021-04-17",
            "ap_name" : "Multicast",
            "sub_ap_name" : "Multicast Layer 2"

        }
    ]
}

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework pymongo


    【解决方案1】:

    演示 - https://mongoplayground.net/p/49vHHUNYn8K

    注意-在details.ap_name 上添加索引以提高性能

    $unwind

    从输入文档中解构一个数组字段,为每个元素输出一个文档。每个输出文档都是输入文档,其中数组字段的值被元素替换。

    $addToSet

    返回一个由所有唯一值组成的数组,该数组是通过将表达式应用于一组文档中的每个文档而产生的,这些文档组中的每个文档按键共享相同的组。未指定输出数组中元素的顺序。

    $group

    按指定的 _id 表达式对输入文档进行分组,并为每个不同的分组输出一个文档。每个输出文档的 _id 字段包含唯一的按值分组。输出文档还可以包含计算字段,这些字段包含一些累加器表达式的值。

    db.collection.aggregate([
      { $match: { "details.ap_name": "EVPN" } }, // filter to reduce load on unwind
      { $unwind: "$details" }, // break into individual documents
      { $match: { "details.ap_name": "EVPN" } }, // filter
      {
        $group: { _id: "$details.ap_name", "sub_ap_names": { $addToSet: "$details.sub_ap_name" } } // add unique values
      }
    ])
    

    【讨论】:

    • @Matt 很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2016-09-30
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多