首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB根据条件返回不同的值

MongoDB根据条件返回不同的值
EN

Stack Overflow用户
提问于 2021-04-18 19:55:19
回答 1查看 1.1K关注 0票数 2

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

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

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

这是我的数据集

代码语言:javascript
复制
{ 
    "_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"

        }
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-18 23:44:32

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

注:添加details.ap_name索引以提高性能

$unwind

从输入文档解构数组字段,以输出每个元素的文档。每个输出文档都是输入文档,数组字段的值由元素替换。

$addToSet

返回将表达式应用于一组按键共享同一组文档中的每个文档所产生的所有唯一值的数组。未指定输出数组中元素的顺序。

$group

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

代码语言:javascript
复制
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
  }
])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67152832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档