mongodb - 过滤掉空元素文档
问题描述
我们有一个商店系列如下。
我们需要将所有'shop'
没有批次的 UNIQUE 返回为空([]
)。
由于这是聚合中的一个阶段 - 它无法利用索引。
所以我们需要找到最有效的方法来完成上述工作。
{
"_id": ObjectId("xxxxxx"),
"shop": "Q4",
"batch": ["5647"],
},
{
"_id": ObjectId("xxxxxx"),
"shop": "Q4",
"batch": ["2314", "0121"],
},
{
"_id": ObjectId("xxxxxx"),
"shop": "Q1",
"batch": ["5647"],
},
{
"_id": ObjectId("xxxxxx"),
"shop": "Q1",
"batch": [],
}
预期结果:第四季度
解决方案
这是聚合查询,
输入:
{
"_id" : ObjectId("5e33c96b08591b1809677543"),
"shop" : "Q5",
"batch" : [
"5857",
"5837"
]
},
{
"_id" : ObjectId("5e33c95a08591b1809677542"),
"shop" : "Q5",
"batch" : [
"5657"
]
},
{
"_id" : ObjectId("5e33c93008591b1809677540"),
"shop" : "Q1",
"batch" : [
"5648",
"5628"
]
},
{
"_id" : ObjectId("5e33c2fe08591b180967753f"),
"shop" : "Q1",
"batch" : [ ]
},
{
"_id" : ObjectId("5e33c2fe08591b180967753e"),
"shop" : "Q1",
"batch" : [
"5647"
]
},
{
"_id" : ObjectId("5e33c2fe08591b180967753d"),
"shop" : "Q4",
"batch" : [
"2314",
"0121"
]
},
{
"_id" : ObjectId("5e33c2fe08591b180967753c"),
"shop" : "Q4",
"batch" : [
"5647"
]
}
询问:
const query = [
{
$group: {
_id: "$shop",
batch: { $push: "$batch" }
}
},
{
$match: {
'batch': { $ne: [] }
}
},
{
$project: {
_id: 1
}
}
];
db.trades.aggregate(query)
结果:
{
"_id" : "Q5"
},
{
"_id" : "Q4"
}
推荐阅读
- java - 在 spring-cloud 项目中,可以完全用 bootstrap.yml 替换 application.yml 吗?
- python - 无法安装避风港 R
- continuous-integration - 在多个存储库之间共享 github 工作流的最有效方式是什么?
- apache2 - 未找到 在此服务器上未找到请求的 URL。Apache/2.4.29 (Ubuntu) 服务器在 localhost 端口 9080
- amazon-web-services - 从弹性beantalk获取日志文件
- asp.net - 如何在使用 IdentityServer4 的 ASP.Net Core SPA 模板中为剃须刀页面添加身份验证
- ios - 为什么我的 iOS 应用打开后突然开始崩溃?
- c++ - 如何在全屏模式下(在 OpenGL 中)使背景透明?
- html - 无法将外部 CSS 链接到 HTML
- flutter - Flutter_ffmpeg:如何从 url 或 storage 获取视频和音频