获取MongoDB对象数组中每个元素的总数

时间:2019-05-02 05:01:29

标签: arrays mongodb loops mongoose analytics

我在MongoDB中有一组对象。该对象包括类型数组。现在,我用Mongoose连接到数据库,现在想知道每种Type的对象数。

例如,我的对象看起来像

{
"name": "abc",
"tags": ["a","b","c"]
}

现在,我想获取例如带有标签“ a”的对象的总数

我正在使用Mongoose通过NodeJS后端连接到MongoDB

感谢您提出有效查询的想法。

添加: 如果我不知道不同对象中存在哪种不同的标签,并且想获得所有标签的概述,我该如何查询该标签?为了更好地理解,我举一个例子。 数据库中的两个对象:

{
"name": "abc",
"tags": ["a","b","c"]
},
{
"name": "abc",
"tags": ["a","b"]
}

函数/查询应该给出类似这样的响应:

{
"a": 2,
"b": 2,
"c": 1
}

2 个答案:

答案 0 :(得分:1)

collection.aggregate([
    {$unwind: "$tags" },
    {$group: {
        _id: "$tags",  
        count: {$sum : 1}  
    }},

]);

这将给出如下输出:

/* 1 */
{
    "_id" : "c",
    "count" : 2
}

/* 2 */
{
    "_id" : "b",
    "count" : 3
}

/* 3 */
{
    "_id" : "a",
    "count" : 2
}

答案 1 :(得分:0)

使用count这是一种收集方法。它仅返回计数,而不是所有文档。如果您需要这些文档,请将count替换为find

collection.count({tags:"a"})