「SequoiaDB巨杉数据库」aggregate()概述3

示例

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

{
  no:1000,
  score:80,
  interest:["basketball","football"],
  major:"计算机科学与技术",
  dep:"计算机学院",
  info:
  {
    name:"Tom",
    age:25,
    gender:"男"
  }
}

按条件选择记录,并指定返回字段名,如下聚集操作操作首先使用 $match 选择 匹配条件的记录,然后使用 $project 只返回指定的字段名。

db.sample.employee.aggregate( { $match: { $and: [ { no: { $gt: 1002 } },
                                                { no: { $lt: 1015 } },
                                                { dep: "计算机学院" } ] } },
                        { $project: { no: 1, "info.name": 1, major: 1 } } )
{
        "no": 1003,
        "info.name": "Sam",
        "major": "计算机软件与理论"
    }
    {
        "no": 1004,
        "info.name": "Coll",
        "major": "计算机工程"
    }
    {
        "no": 1005,
        "info.name": "Jim",
        "major": "计算机工程"
    }

按条件选择记录,并对记录进行分组。如下操作首先使用 $match 选择匹配条件的记录, 然后使用 $group 对记录按字段 major 进行分组,并使用 $avg 返回每个分组中嵌套 对象 age 字段的平均值。

db.sample.employee.aggregate( { $match: { dep:  "计算机学院" } },
                        { $group: { _id:  "$major", Major: { $first: "$major" }, 
                          avg_age: { $avg: "$info.age" } } } ) 
{
    "Major": "计算机工程",
    "avg_age": 25
    }
    {
    "Major": "计算机科学与技术",
    "avg_age": 22.5
    }
    {
    "Major": "计算机软件与理论",
    "avg_age": 26
    }

按条件选择记录,并对记录进行分组、排序、限制返回记录的起始位置和返回记录数。 如下操作首先按 $match 选择匹配条件的记录;然后使用 $group 按 major 进行分组, 并使用 $avg 返回每个分组中嵌套对象 age 字段的平均值,输出字段名为 avg_age; 最后使用 $sort 按 avg_age 字段值(降序),major 字段值(降序)对结果集进行 排序,使用 $skip 确定返回记录的起始位置,使用 $limit 限制返回记录的条数。

db.sample.employee.aggregate( { $match: { interest: { $exists: 1 } } }, 
                            { $group: { _id: "$major", 
                                        avg_age: { $avg: "$info.age" }, 
                                        major: { $first: "$major" } } }, 
                            { $sort: { avg_age: -1, major: -1 } }, 
                            { $skip: 2 }, 
                            { $limit: 3 } )
{
        "avg_age": 25,
        "major": "计算机科学与技术"
    }
    {
        "avg_age": 22,
        "major": "计算机软件与理论"
    }
    {
        "avg_age": 22,
        "major": "物理学"
    }

点击巨杉数据库文档中心了解更多信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值