Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/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
Angularjs mongoose中的组嵌套内部数组_Angularjs_Arrays_Node.js_Mongodb_Mongoose - Fatal编程技术网

Angularjs mongoose中的组嵌套内部数组

Angularjs mongoose中的组嵌套内部数组,angularjs,arrays,node.js,mongodb,mongoose,Angularjs,Arrays,Node.js,Mongodb,Mongoose,我的mongoDb内容如下: [{ "_id": { "$oid": "57c6699711bd6a0976cabe8a" }, "ID": "1111", "FullName": "AAA", "Category": [ { "CategoryId": { "$oid": "57c66ebedcba0f63c1ceea51" }, "_id": { "$oid": "57e38a8a

我的mongoDb内容如下:

[{
"_id": {
    "$oid": "57c6699711bd6a0976cabe8a"
},
"ID": "1111",
"FullName": "AAA",
"Category": [
    {
        "CategoryId": {
            "$oid": "57c66ebedcba0f63c1ceea51"
        },
        "_id": {
            "$oid": "57e38a8ad190ea1100649798"
        },
        "Value": [
            {
                "Name": ""
            }
        ]
    },
    {
        "CategoryId": {
            "$oid": "57c3df061eb1e59d3959cc40"
        },
        "_id": {
            "$oid": "57e38a8ad190ea1100649797"
        },
        "Value": [
            [
                "111",
                "XXXX",
                "2005"
            ],
            [
                "1212",
                "YYYY",
                "2000"
            ],
            [
                "232323",
                "ZZZZZ",
                "1999"
            ]
        ]
    }
]
},{
    "_id": {
        "$oid": "57c6699711bd6a0976cabe8a"
    },
    "ID": "1111",
    "FullName": "BBB",
    "Category": [
        {
            "CategoryId": {
                "$oid": "57c66ebedcba0f63c1ceea51"
            },
            "_id": {
                "$oid": "57e38a8ad190ea1100649798"
            },
            "Value": [
                {
                    "Name": ""
                }
            ]
        },
        {
            "CategoryId": {
                "$oid": "57c3df061eb1e59d3959cc40"
            },
            "_id": {
                "$oid": "57e38a8ad190ea1100649797"
            },
            "Value": [
                [
                    "4444",
                    "XXXX",
                    "2005"
                ],
                [
                    "7777",
                    "GGGG",
                    "2000"
                ],
                [
                    "8888",
                    "ZZZZZ",
                    "1999"
                ]
            ]
        }
    ]
}]
resume.aggregate([
  {$match: {'Category.CategoryId': new ObjectId('57c3df191eb1e59d3959cc43')}},
  {$unwind: '$Category'},
  {$unwind: '$Category.Value'},
  {$match: {'Category.CategoryId': new ObjectId('57c3df191eb1e59d3959cc43')}},
  {$group: { _id: '$Category.Value', count: {$sum: 1}}},
  {$project: {'_id':0, TagValue: '$_id',count: '$count'}}
],function(err, resData){
        res.send(resData);
});
这里有一个名为“ResumeControle”的数组,其中包含具有不同类别id的对象

我需要 1.选择id为“57c3df061eb1e59d3959cc40”的类别 2.以上所选类别包含值作为数组 3.从值数组中,我必须根据第二个值对元素进行分组,并需要获取用户名列表

Eg输出:

[{
    'CategoryName': 'XXXX',
    'Users': ['AAA', 'BBB']
},
{
    'CategoryName': 'YYYY',
    'Users': ['AAA']
},
{
    'CategoryName': 'ZZZZZ',
    'Users': ['AAA', 'BBB']
},
{
    'CategoryName': 'GGGG',
    'Users': ['BBB']
}]
我尝试使用聚合函数进行分组,如下所示:

[{
"_id": {
    "$oid": "57c6699711bd6a0976cabe8a"
},
"ID": "1111",
"FullName": "AAA",
"Category": [
    {
        "CategoryId": {
            "$oid": "57c66ebedcba0f63c1ceea51"
        },
        "_id": {
            "$oid": "57e38a8ad190ea1100649798"
        },
        "Value": [
            {
                "Name": ""
            }
        ]
    },
    {
        "CategoryId": {
            "$oid": "57c3df061eb1e59d3959cc40"
        },
        "_id": {
            "$oid": "57e38a8ad190ea1100649797"
        },
        "Value": [
            [
                "111",
                "XXXX",
                "2005"
            ],
            [
                "1212",
                "YYYY",
                "2000"
            ],
            [
                "232323",
                "ZZZZZ",
                "1999"
            ]
        ]
    }
]
},{
    "_id": {
        "$oid": "57c6699711bd6a0976cabe8a"
    },
    "ID": "1111",
    "FullName": "BBB",
    "Category": [
        {
            "CategoryId": {
                "$oid": "57c66ebedcba0f63c1ceea51"
            },
            "_id": {
                "$oid": "57e38a8ad190ea1100649798"
            },
            "Value": [
                {
                    "Name": ""
                }
            ]
        },
        {
            "CategoryId": {
                "$oid": "57c3df061eb1e59d3959cc40"
            },
            "_id": {
                "$oid": "57e38a8ad190ea1100649797"
            },
            "Value": [
                [
                    "4444",
                    "XXXX",
                    "2005"
                ],
                [
                    "7777",
                    "GGGG",
                    "2000"
                ],
                [
                    "8888",
                    "ZZZZZ",
                    "1999"
                ]
            ]
        }
    ]
}]
resume.aggregate([
  {$match: {'Category.CategoryId': new ObjectId('57c3df191eb1e59d3959cc43')}},
  {$unwind: '$Category'},
  {$unwind: '$Category.Value'},
  {$match: {'Category.CategoryId': new ObjectId('57c3df191eb1e59d3959cc43')}},
  {$group: { _id: '$Category.Value', count: {$sum: 1}}},
  {$project: {'_id':0, TagValue: '$_id',count: '$count'}}
],function(err, resData){
        res.send(resData);
});
从上面的查询中,它根据值数组进行分组。将包含三个元素的数组分组。任何人都可以根据内部数组值(单个元素,即值[1])对值进行分组,并获得所需的结果


提前感谢。

您可以在项目阶段使用
$arrayElemAt
(在3.2版中引入)来选择阵列中的第二个元素

db.resume.aggregate([
                        {"$unwind":"$Category"}, 
                        {"$match":{"Category.CategoryId" :ObjectId("57c3df061eb1e59d3959cc40")}}, 
                        {"$unwind":"$Category.Value"}, 
                        {"$project":{"FullName":1, "secondVal" : {"$arrayElemAt": ["$Category.Value",1]} }}, 
                        {"$group":{"_id":"$secondVal", "Users":{"$addToSet":"$FullName"}}}, 
                        {"$project":{"CategoryName":"$_id", "_id": 0, "Users":1}}
                    ])
样本输出:

{ "Users" : [ "AAA", "BBB" ], "CategoryName" : "XXXX" }
{ "Users" : [ "AAA" ], "CategoryName" : "YYYY" }
{ "Users" : [ "BBB" ], "CategoryName" : "GGGG" }
{ "Users" : [ "AAA", "BBB" ], "CategoryName" : "ZZZZZ" }
您只需将“Category.Value”字段两次,因为它有两个嵌套数组:

resume.aggregate([
    { "$match": { "Category.CategoryId": "57c3df061eb1e59d3959cc40" } },
    { "$unwind": "$Category" },
    { "$match": { "Category.CategoryId": "57c3df061eb1e59d3959cc40" } },    
    { "$unwind": "$Category.Value" },// <-- unwind twice
    { 
        "$unwind": {
            "path": "$Category.Value",
            "includeArrayIndex": "idx" 
        }
    },
    { "$match": { "idx": 1 } },
    {
        "$group": {
            "_id": "$Category.Value",
            "Users": { "$push": "$FullName" },
            "count": { "$sum": 1 }
        }
    },
    { "$project": { "_id": 0, "CategoryName": "$_id", "Users": 1, "count": 1 } } 
], function(err, resData){
    res.send(resData);
});
resume.aggregate([
{“$match”:{“Category.CategoryId”:“57c3df061eb1e59d3959cc40”},
{“$unwind”:“$Category”},
{“$match”:{“Category.CategoryId”:“57c3df061eb1e59d3959cc40”},

{“$unwind”:“$Category.Value”},//嗨..我的MongoDb版本-3.0.12…这是一个版本问题吗..如果是这样的话,3.0.12版本中的“$arrayElemAt”的等价物是什么?operator$arrayElemAt”是在3.2版本中引入的。因此,它在3.0版本中不起作用。3.0.12 MongoDb版本中的“$arrayElemAt”有任何等价物吗???我有e升级了我的mongodb版本,“$arrayElemAt”正在运行。但它获得了所有类别,但我只需要id与“57c3df061eb1e59d3959cc40”匹配的类别。如何在“$project”中包含此条件@user3211705:如我的回答所示,您可以在$unwind之后使用$match来限制id为57c3df061eb1e59d3959cc40的类别。上面的示例使用数组中的第一个值对数据进行分组。我应该如何使用第二个值进行分组???即值[1]…您使用的是哪个mongodb版本?我已将我的mongodb版本从3.0.12升级到3.2.10。您可以尝试使用
$unwind
操作符包含一个额外字段,该字段保存数组元素索引,然后过滤该索引上的文档,如上面的更新所示。