• aggregate()
    • 名称
    • 语法
    • 类别
    • 描述
    • 参数
    • 返回值
    • 错误
    • 版本
    • 示例

    aggregate()

    名称

    aggregate - 计算集合中数据的聚合值。

    语法

    db.collectionspace.collection.aggregate( <subOp>… )

    类别

    Collection

    描述

    aggregate() 方法与 find()方法功能比较接近,也是从 SequoiaDB 的集合中检索文档记录,并返回游标。

    参数

    • subOp ( Object必填 )

    subOp 表示子操作,在 aggregate() 方法中可以填写 1~N 个子操作。

    Note:

    • aggregate() 方法可以有任意多个子操作,每个子操作是一个 Object 对象,子操作之间用逗号隔开。注意各子操作的参数名的语法规则。

    返回值

    成功:返回游标对象,可通过游标对象获取结果集。

    失败:抛出异常。

    错误

    aggregate()函数常见异常如下:

    错误码错误类型描述解决方法

    当异常抛出时,可以通过getLastError()获取错误码,或通过getLastErrMsg()获取错误信息。可以参考常见错误处理指南了解更多内容。

    版本

    v1.0及以上版本。

    示例

    假设集合 collection 包含如下格式的记录:

    1. {
    2. no:1000,
    3. score:80,
    4. interest:["basketball","football"],
    5. major:"计算机科学与技术",
    6. dep:"计算机学院",
    7. info:
    8. {
    9. name:"Tom",
    10. age:25,
    11. gender:"男"
    12. }
    13. }
    • 按条件选择记录,并指定返回字段名,如下聚集操作操作首先使用 $match 选择匹配条件的记录,然后使用 $project 只返回指定的字段名。
    1. > db.foo.bar.aggregate( { $match: { $and: [ { no: { $gt: 1002 } },
    2. { no: { $lt: 1015 } },
    3. { dep: "计算机学院" } ] } },
    4. { $project: { no: 1, "info.name": 1, major: 1 } } )
    5. {
    6. "no": 1003,
    7. "info.name": "Sam",
    8. "major": "计算机软件与理论"
    9. }
    10. {
    11. "no": 1004,
    12. "info.name": "Coll",
    13. "major": "计算机工程"
    14. }
    15. {
    16. "no": 1005,
    17. "info.name": "Jim",
    18. "major": "计算机工程"
    19. }
    • 按条件选择记录,并对记录进行分组。如下操作首先使用 $match 选择匹配条件的记录,然后使用 $group 对记录按字段 major 进行分组,并使用 $avg 返回每个分组中嵌套对象 age 字段的平均值。
    1. > db.foo.bar.aggregate( { $match: { dep: "计算机学院" } },
    2. { $group: { _id: "$major", Major: { $first: "$major" },
    3. avg_age: { $avg: "$info.age" } } } )
    4. {
    5. "Major": "计算机工程",
    6. "avg_age": 25
    7. }
    8. {
    9. "Major": "计算机科学与技术",
    10. "avg_age": 22.5
    11. }
    12. {
    13. "Major": "计算机软件与理论",
    14. "avg_age": 26
    15. }
    • 按条件选择记录,并对记录进行分组、排序、限制返回记录的起始位置和返回记录数。如下操作首先按 $match 选择匹配条件的记录;然后使用 $group 按 major 进行分组,并使用 $avg 返回每个分组中嵌套对象 age 字段的平均值,输出字段名为 avg_age; 最后使用 $sort 按 avg_age 字段值(降序),major 字段值(降序)对结果集进行排序,使用 $skip 确定返回记录的起始位置,使用 $limit 限制返回记录的条数。
    1. > db.foo.bar.aggregate( { $match: { interest: { $exists: 1 } } },
    2. { $group: { _id: "$major",
    3. avg_age: { $avg: "$info.age" },
    4. major: { $first: "$major" } } },
    5. { $sort: { avg_age: -1, major: -1 } },
    6. { $skip: 2 },
    7. { $limit: 3 } )
    8. {
    9. "avg_age": 25,
    10. "major": "计算机科学与技术"
    11. }
    12. {
    13. "avg_age": 22,
    14. "major": "计算机软件与理论"
    15. }
    16. {
    17. "avg_age": 22,
    18. "major": "物理学"
    19. }