如何在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
答案 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