Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套在文档数组中的mongodb展开数组_Mongodb_Aggregation Framework - Fatal编程技术网

嵌套在文档数组中的mongodb展开数组

嵌套在文档数组中的mongodb展开数组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在MongoDB中,我需要能够将嵌套在文档中的数组展开到主文档中的数组中 { “_id”:ObjectId(“5808d700536d1a3d69f4cf51”), “姓氏”:“梅蒂”, “希思马克”:58, “id”:“3539488”, “名字”:“哈沙瓦丹”, “课程名称”:“BE/B.Tech”, “学院名称”:“阿卜哈亚普里学院,P.O.阿卜哈亚普里”, “个人资料百分比”:45, “xiith_mark_type”:“百分比”, “第X个标记类型”:“百分比”, “出生日期”:“19

在MongoDB中,我需要能够将嵌套在文档中的数组展开到主文档中的数组中

{
“_id”:ObjectId(“5808d700536d1a3d69f4cf51”),
“姓氏”:“梅蒂”,
“希思马克”:58,
“id”:“3539488”,
“名字”:“哈沙瓦丹”,
“课程名称”:“BE/B.Tech”,
“学院名称”:“阿卜哈亚普里学院,P.O.阿卜哈亚普里”,
“个人资料百分比”:45,
“xiith_mark_type”:“百分比”,
“第X个标记类型”:“百分比”,
“出生日期”:“1993年4月14日”,
“X分”:30分,
“上次登录”:1470827224,
“百分比”:55,
“作业详细信息”:[
{
“状态”:长(6)号,
“申请日期”:数字长(1470831441),
“作业id”:编号长(92928),
“联系人状态”:0,
“标签名称”:[
“入围名单”,
“拒绝”
],
“调查问卷状态”:0,
“批次id”:编号长(6),
“来电信”:号码长(812)
}, 
{
“状态”:长(6)号,
“申请日期”:数字长(1470831441),
“作业id”:编号长(92928),
“联系人状态”:0,
“标签名称”:[
“入围名单”,
“拒绝”
],
“调查问卷状态”:0,
“批次id”:编号长(6),
“来电信”:号码长(812)
}
],
“分支机构名称”:“应用电子”,
“候选人州名”:“西孟加拉邦”,
“候选城市名称字符串”:“加尔各答”,
"10" : 10,
"12" : 12,
“技能”:“,
“性别”:“男性”,
“fw_id”:“FW15884830”,
“cgpa”:0,
“图片路径”:“,
“总部发放年度”:2019年
}
根据以上记录,我需要计算工作标签(工作详细信息。标签名称)

我尝试了以下查询:

db.response.aggregate(
{“$match”:键入_match},
{“$unwind”:“$job_details”},
{“$组”:
{
“\u id”:“$job\u details.label\u name”,
“计数”:{“$sum”:1}
}
}
])
输出为:

{
“计数”:2,
“_id”:[
“入围名单”,
“拒绝”
]
}
但我希望输出是:

[
{ 
“计数”:1,
_id:“入围名单”
},  
{  
“计数”:1,
_id:“已拒绝”
}
]
如何获得此输出?

在阶段中,字段应为数组字段。如果不是数组字段,则将其视为1个元素的数组

从文档中: 在版本3.2中更改:$unwind stage不再在非数组操作数上出现错误。如果操作数未解析为数组,但未丢失、为null或为空数组,$unwind将操作数视为单元素数组


回答你的问题:

db.response.aggregate([
    {
        $project:
        {
            "job_details.label_name":1,
            _id:0
        }
    },
    {
        $unwind:"$job_details.label_name"
    },
    {
        $group:
        {
            _id:"$job_details.label_name",
            count:{$sum:1}
        }
    }
])

请参阅Shell

您是否询问如何计算“job\u details.label\u name”数组中的元素数?在客户端执行计数可能更容易。您发布的聚合查询在语法上不正确。没有起始“[”大括号,但有一个结尾。我改进了您问题中的措辞和格式,使其更具可读性;我还添加了标记聚合框架。{“结果”:[],“确定”:1}你能发布shell输出的快照吗?很抱歉,Nigil正在工作,但在我的文档中还有一个更改。在上面的文档作业详细信息中,我声明为一个单独的文档,实际上这是一个文档列表。对于mongo 3.6,这不起作用。结果是emptyYes可能>3.6,我使用的是4.0,其中对嵌套数组使用点表示法不起作用要清空数组,必须执行两次$unwind,这很无聊。如果有人有解决方案,请告诉我们!!