MongoDB - 许多人使用数组计数

时间:2017-01-21 15:37:35

标签: mongodb mongoose

如何在Mongoose中使用数组作为输入进行多次计数,并返回一个数组

我正在尝试使用下面的代码,但它不起作用,list2返回为空。

list = ['Ann', 'Bob', 'John', 'Karl'];
list2 = [];

for(let i = 0; i < list.length; i++) {
    Clients.count({name: list[i]}, function(err, doc){
        list2.push(doc);
    })
}
return list2

3 个答案:

答案 0 :(得分:3)

您可以按如下方式运行聚合管道:

list = ['Ann', 'Bob', 'John', 'Karl'];
list2 = [];
Clients.aggregate([
    { "$match": { "name": { "$in": list } } },
    {
        "$group": {
            "_id": "$name",
            "count": { "$sum": 1 }
        }
    },
    {
        "$group": {
            "_id": null,
            "list2": {
                "$push": {
                    "name": "$_id",
                    "count": "$count"
                }
            }
        }
    }
]).exec(function(err, results) {
    list2 = results[0].list2;
    console.log(list2);
});

答案 1 :(得分:2)

const async = require('async');

var list = ['Ann', 'Bob', 'John', 'Karl'];

async.map(list, function(item, callback) {
    result = {};
    Clients.count({name: item}, function(err, data) {
        result[item] = data || 0;
        return callback(null, result);
    });
}, function(err, data) {
    console.log(data);
});

答案 2 :(得分:0)

这是另一种基于Med Lazhari answer

的方式
class Article
    public function addImage($image) {
        $this->images[] = $image;
        $image->setArticle($this); // ADD THIS