📜  mongoose 查询中的数组计数 - Javascript (1)

📅  最后修改于: 2023-12-03 15:32:57.771000             🧑  作者: Mango

Mongoose查询中的数组计数 - JavaScript

在 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 实现数组计数。