如果我的数据库里存储了这样几条记录
{ library: ‘foo’,
books:
{
name: ‘harry potter’,
year: 2005,
price: 70
}
}
{ library: ‘foo’,
books:
{
name: 'Game of Thrones’,
year: 2012,
price: 80,
}
}
{ library: ‘foo’,
books:
{
name: ‘jobs’,
year: 20012,
price: 120,
}
}
怎样用聚合(aggregate)命令计算'foo'图书馆的所有三本书的平均价格(avg. price)?
db.transport.cars.aggregate(
db.foo.bar.aggregate({$match:{library:'foo'}},{$project:{library:1,'books.price':1}},
{$group:{_id:’$library’, average:{$avg:’$books.price’},library_name:{$first:’$library’}}})
返回应该类似于
{ ‘library_name’:’foo’, ‘average’ : 90 }
$match 是 select condition
$project 是选择输出那些结果
$group 对结果集分组
$avg 求结果
$first输出第一个记录的字段
手写的命令,没实测,你可以自己在数据库插入几条数据试试看。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。