在探索nodejs的mongoose时,我遇到了需要知道我的集合中用户数量的问题:
我的收藏有记录,每个记录都有一个用户。我想知道唯一(不同)用户的数量。
我如何用mongoose做到这一点?
修改
数据库的增长速度非常快,无论如何都要从数据库中取回数字而不是获取所有不同的记录并计算它们?
答案 0 :(得分:13)
这是另一个答案,因为当我尝试使用Redo的Mongoose 3.1.2方法时出现异常(这对我来说似乎是Mongoose中的一个bug,因为Reddest的方法应该没问题。)
您可以在集合的模型上调用distinct
方法,指定该集合的用户标识字段的名称:
Record.distinct('user_id').exec(function (err, user_ids) {
console.log('The number of unique users is: %d', user_ids.length);
});
或者,如果您想从查找链接distinct
来电,请在distinct
来电中包含回调(这对我有用):
Record.find().distinct('user_id', function (err, user_ids) { ... });
<强>更新强>
如果您只想获得计数而不获取值,请在链中粘贴count()
个电话:
Record.distinct('user_id').count().exec(function (err, count) {
console.log('The number of unique users is: %d', count);
});
注意:这在最新的Mongoose代码(3.5.2)中不起作用。
答案 1 :(得分:11)
聚合对您有用。这样的事情:
Transaction.aggregate(
{ $match: { seller: user, status: 'completed' } },
{ $group: { _id: '$customer', count: {$sum: 1} } }
).exec()
答案 2 :(得分:3)
如果您只想获取查询集合的数量,可以使用:
Record.find()
.distinct('user_id')
.count(function (err, count) {
//The number of unique users is 'count'
});
答案 3 :(得分:1)
您可以执行不同的查询。
var Record = db.model('Record', yourSchema);
Record.find().distinct('user').exec(callback);
猫鼬查询: http://mongoosejs.com/docs/queries.html
MongoDB独特查询: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct
答案 4 :(得分:0)
我只需要不同音乐家的数量,但有些上面的代码对我不起作用。如果我一起使用count和distinct,我就得到了总数。
这是我的解决方案:
var data = [{
"name": "bagette",
"price": "0.200"
}, {
"name": "farine",
"price": "1"
}, {
"name": "tomato",
"price": "1.200"
}, {
"name": "chocola",
"price": "4.000"
}];
data = data.map((x)=>[x.name , x.price]);
console.log(data[0][0]);
console.log(data[0][1]);
console.log(data[1][0]);
console.log(data[2][1]);