📅  最后修改于: 2023-12-03 15:32:57.771000             🧑  作者: Mango
在 Mongoose 中,当需要对查询结果中的数组进行计数时,可以使用 countDocuments()
或 count()
方法来实现。这两个方法都可以接受条件参数,用于过滤数据。
countDocuments()
countDocuments()
方法返回符合条件的文档数量。例如,如果有一个 users
模型,其中包含一个名为 friends
的数组,可以使用以下代码计算每个用户的朋友数量:
const User = require('./models/user');
User.aggregate([
{$project: {friendCount: {$size: '$friends'}}},
{$sort: {friendCount: -1}}
], function(err, result) {
console.log(result);
});
在这个例子中,首先通过 $project
利用 $size
运算符计算 friends
数组的大小,并将结果重命名为 friendCount
。然后使用 $sort
将结果按 friendCount
降序排列。
count()
count()
方法与 countDocuments()
方法类似,但是在某些情况下会更快。例如,如果只需计算符合条件的文档数量,而不需要查询其他字段,可以使用 count()
方法。
使用 count()
方法计算每个用户的朋友数量的代码如下所示:
const User = require('./models/user');
User.find({}).exec(function(err, users) {
if (err) {
console.error(err);
} else {
users.forEach(function(user) {
User.count({friends: {$in: [user._id]}}).exec(function(err, count) {
if (err) {
console.error(err);
} else {
console.log(user.username + ' has ' + count + ' friends');
}
});
});
}
});
在这个例子中,首先通过 User.find({})
查询所有用户记录。然后使用 users.forEach()
遍历每个用户,并使用 User.count()
方法计算属于该用户的朋友数量。具体的计算方式是,使用 $in
运算符查询 friends
数组中包含该用户 _id
的记录的数量。
使用 countDocuments()
或 count()
方法都可以对查询结果中的数组进行计数。选择哪个方法取决于具体使用场景和性能需求。如果需要查询其他字段,并且在过滤条件下文档数量不是很大,建议使用 countDocuments()
方法。如果只需计算符合条件的文档数量,则可以使用 count()
方法。无论使用哪种方法,都可以方便地通过 Mongoose 实现数组计数。