MongoDB | 如何在对象数组中计算属性的特定值并按属性分组

大操作系统

收集与以下文件类似的文件:

{ 
    "_id" : ObjectId("5dc027718da295b969e529ae"), 
    "emp_no" : 10001, 
    "gender" : "M", 
    "titles" : [
        {
            "title" : "Senior Engineer", 
            "dept_name" : "Development", 
            "from_date" : "1986-06-26", 
            "to_date" : "9999-01-01"
        },
        {
            "title" : "Staff", 
            "dept_name" : "Human Resources", 
            "from_date" : "1986-06-26", 
            "to_date" : "9999-01-01"
        }
    ]
}

我如何计算某个部门有多少个 M 正在工作,以便得到类似Development:874505的结果
我有另一个集合,其中包含以下文件:

//one document
{ 
    "_id" : ObjectId("5dc026438da295b969e01893"), 
    "dept_no" : "d005", 
    "dept_name" : "Development", 
    "emp_no" : 10001, 
    "from_date" : "1986-06-26", 
    "to_date" : "9999-01-01"
}

//another document
{ 
    "_id" : ObjectId("5dc026438da295b969e01894"), 
    "dept_no" : "d003", 
    "dept_name" : "Human Resources", 
    "emp_no" : 10001, 
    "from_date" : "1986-06-26", 
    "to_date" : "9999-01-01"
}

也许使用这个可以使这个过程更容易?

普拉萨德_

我如何计算某个部门有多少个 M 正在工作,以便得到类似Development:874505的结果

聚合查询:

$unwind得到所有的子文档元素titles的数组。然后我们通过gender匹配那些dept_name最后,数一数。$group阶段确保在同一部门担任两个角色的员工算作一个

var deptMatch = "Development";

db.emps.aggregate( [
  { $unwind: "$titles" },
  { $match: { gender: "M", "titles.dept_name": deptMatch } },
  { $group: { _id: "$emp_no" } },
  { $count: deptMatch }
] )

注意:如果有很多文件,我建议您将性别匹配放在放松阶段之前。您将在以下阶段处理较少数量的文件。



[编辑添加]

我使用此示例数据(为简洁起见删除了一些字段)来获得以下结果:

{ "Development" : 3 }

集合emps的文件:

{ 
    "_id" : 1, 
    "emp_no" : 10001, 
    "gender" : "M", 
    "titles" : [
        { "title" : "Senior Engineer",  "dept_name" : "Development" },
        { "title" : "Staff", "dept_name" : "Human Resources" }
    ]
},
{ 
    "_id" : 2, 
    "emp_no" : 10002, 
    "gender" : "M", 
    "titles" : [
        { "dept_name" : "Development" }
    ]
},
{ 
    "_id" : 3, 
    "emp_no" : 10009, 
    "gender" : "F", 
    "titles" : [
        { "dept_name" : "Procurement" }
    ]
}
{ 
    "_id" : 4, 
    "emp_no" : 10004, 
    "gender" : "M", 
    "titles" : [
        { "dept_name" : "HR" },
        { "dept_name" : "Procurement" }
    ]
}
{   "_id" : 5, 
    "emp_no" : 10012, 
    "gender" : "M", "titles" : [ 
        { "title" : "Staff", "dept_name" : "Development" }, 
        { "title" : "Senior Staff", "dept_name" : "Development" } 
    ] 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在MongoDB中计算的分组依据字段

具有特定属性的MongoDb Access对象数组

如何在mongodb和php中计算特定日期的对象

如何在C#Mongodb强类型驱动程序中计算单个属性的平均值

mongodb按属性值查询内部数组,该属性值的对象计数大于n值?

在MongoDB中获取数组属性值的计数

如何在mongodb对象数组中比较不同对象的属性

在MongoDB中计算特定ID的不同值

如何在mongodb中计算数组中的对象?

如何在mongodb中计算总和

MongoDB C#查询包含属性值的对象数组

如何在mongoDB查询中从对象返回单个属性?

如何按属性分组MongoDB数据?

如何从mongodb中的对象数组获取公共属性

如何在MongoDB中计算数组重复元素

如何在MongoDB中将数组字段的元素更改为具有单个属性的字典的值

如何从mongoDB中的数组中获取不同的值并按ID将它们分组

如何在MongoDB MapReduce JavaScript查询中的对象数组中引用对象的每个属性?

在MongoDb中,如何在数组属性中的对象上设置值?

如何在Mongodb中将文档与对象属性的值匹配

MongoDB C#-数组中特定对象的更新属性

MongoDB如何在查询中引用对象的属性

如何在对象数组中搜索特定的匹配属性值?

MongoDB 对象属性检查 $exists 是否在嵌套数组中具有特定值

MongoDB 按月和年计算属性和分组的值

如何在Mongodb中仅获取对象数组的特定对象

如何在 mongodb 中找到所有包含具有属性的对象的数组的文档?

如何在对象内部排序并减去MongoDB中对象内部的值

如何计算集合中数组内真正布尔值的数量并按 MongoDB 中的作业分组?