📜  mongodb 聚合 node.js - Javascript (1)

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

MongoDB 聚合 Node.js - Javascript

在Node.js中使用MongoDB聚合是获取和处理数据的有力工具,它可以在数据库中聚合和分析数据,从而得到我们所需的结果。

聚合管道

MongoDB聚合通过聚合管道(pipe)进行操作,管道是由多个阶段(stage)组成的,每个阶段都有不同的操作。

以下是一些常用的聚合管道阶段:

match 阶段

match阶段用于筛选符合条件的文档,类似于查询。例如:

db.collection('users').aggregate([
  { $match: { age: { $gt: 18 } } }
])

以上代码是从users集合中聚合数据,条件为年龄大于18岁的文档。

group 阶段

group阶段将文档按指定字段分组,之后可以对每组进行统计或计算。例如:

db.collection('users').aggregate([
  {
    $group: {
      _id: '$gender',
      count: { $sum: 1 }
    }
  }
])

以上代码依据性别对文档进行分组,并聚合每个分组中的文档数量。

project 阶段

project阶段用于投影字段,只保留需要的字段,还可以用表达式进行操作。例如:

db.collection('users').aggregate([
  {
    $project: {
      name: 1,
      age: 1,
      yearOfBirth: { $subtract: [2021, '$age'] }
    }
  }
])

以上代码保留了文档的nameage字段,并用表达式计算出出生年份yearOfBirth

sort 阶段

sort阶段用于对文档进行排序。例如:

db.collection('users').aggregate([
  { $sort: { age: -1 } }
])

以上代码按年龄降序排序。

limit 阶段

limit阶段用于限制返回文档的数量。例如:

db.collection('users').aggregate([
  { $limit: 10 }
])

以上代码限制返回文档数量为10。

skip 阶段

skip阶段用于跳过指定数量的文档。例如:

db.collection('users').aggregate([
  { $skip: 10 }
])

以上代码跳过前10个文档。

MongoDB聚合操作 - 示例

以下代码演示如何使用Node.js和MongoDB进行聚合操作:

const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase';

MongoClient.connect(url, function(err, client) {
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  db.collection('users').aggregate([
    { $match: { age: { $gt: 18 } } },
    {
      $group: {
        _id: '$gender',
        count: { $sum: 1 }
      }
    },
    { $sort: { count: -1 } },
    { $limit: 10 }
  ]).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    client.close();
  });

});

以上代码从users集合中聚合年龄大于18岁的用户,并根据性别分组,统计每个组中的用户数量。之后按数量降序排序,限制返回结果前10条。最后将结果输出到控制台并关闭连接。

返回结果如下(仅展示前3条):

[ { _id: 'female', count: 10738 },
  { _id: 'male', count: 8369 },
  { _id: 'unknown', count: 142 } ]
结论

本文介绍了MongoDB聚合在Node.js中的应用,通过聚合管道对文档进行操作,主要包括matchgroupprojectsortlimitskip阶段。最后演示了如何使用Node.js和MongoDB进行聚合查询。聚合查询是MongoDB广泛应用的一个重要功能,它可以方便地处理数据,获取我们所需的统计和计算结果。