mongodb - 在 MongoDB 中获取第一个创建的文档并按字段名分组
问题描述
我想为每家公司创建第一个部门,但是,我对聚合查询感到困惑。
文件:
[
{
_id: "5b7579f2deea1c6e46fd9739",
name: "Sales",
companyId: "123",
},
{
_id: "5c5779f1dffe1c6e45df3973",
name: "Security",
companyId: "123",
},
{
_id: "5d9759f5ceda1c6e64df9772",
name: "Human Resource",
companyId: "789",
},
]
我期待这样的结果:
预期结果:
[
{
_id: "5b7579f2deea1c6e46fd9739",
name: "Sales",
companyId: "123",
},
{
_id: "5d9759f5ceda1c6e64df9772",
name: "Human Resource",
companyId: "789",
},
]
但是我的查询只得到一个结果。
实际结果:
[
{
_id: "5b7579f2deea1c6e46fd9739",
name: "Sales",
companyId: "123",
},
]
聚合查询:
db.getCollection('departments').aggregate([
{
$sort:{ item: 1 }
},
{
$group: {
_id:'$item',
companyId: { $first:'$companyId'},
name: { $first:'$name'},
}
}
])
解决方案
您需要像这样按companyId
字段分组:
db.departments.aggregate([
{
$group: {
_id: "$companyId",
doc: {
$first: "$$ROOT"
}
}
},
{
$replaceRoot: {
newRoot: "$doc"
}
}
])
如果您有像日期字段这样的自然排序字段,那么最好在小组赛阶段之前对该字段应用排序阶段。
推荐阅读
- python - 我们可以在 tkinter 中嵌套两个 OptionMenu 小部件吗?
- python - 实现这种二维数值积分的计算速度更快的方法是什么?
- kubernetes - 一个 Kubernetes 应用程序有多少个线程?
- php - PHP在mysql表中创建用户
- laravel - 当我想在 laravel 5.8 中使用模型绑定时出现此错误
- c++ - 构建失败 arm-none-eabi-gcc
- python - 如何将 numpy 数组插入到数组的 numpy 数组中?
- angular - Angular 在新文件夹中找不到模块
- python - 在 Tensorflow 中 - 是否可以将特定的卷积过滤器锁定在一个层中,或者完全删除它们?
- java - 持久性xml文件等效java配置与spring boot