mongodb - MongoDB 根据条件返回不同的值
问题描述
我正在尝试使用 MongoDbdetails.sub_ap_name
在搜索details.ap_name
等于时返回不同的值,EVPN
但是我的搜索返回的所有唯一值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"
}
]
}
解决方案
演示 - https://mongoplayground.net/p/49vHHUNYn8K
details.ap_name
注意-为性能添加索引
从输入文档中解构一个数组字段以输出每个元素的文档。每个输出文档都是输入文档,其中数组字段的值被元素替换。
返回一个由所有唯一值组成的数组,这些唯一值是通过将表达式应用于一组文档中的每个文档而产生的,这些文档按键共享同一组。未指定输出数组中元素的顺序。
按指定的 _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
}
])
推荐阅读
- flutter - Flutter 无法加载资产
- powershell - powershell 输出 ad-computer foreach 的问题
- python - Python 在井字游戏中定义函数
- excel - 如何编写适用于任何工作簿的排序代码?
- machine-learning - 如何在python中绘制正确的超平面
- editor - ThebeLab的输入框(使用codemirror)如何设置样式?
- java - Java 11 (Zulu) 中的 DateTimeFormatter 不适用于 AM / PM 格式
- php - 如何打印脸书评论
- java - 分而治之的递归矩阵乘法
- python-3.x - 当我尝试使用 Flask rest API 上传文件时,我得到:上游过早关闭连接,同时从上游读取响应标头,客户端