假设我有一个MongoDB集合,其中包含以下信息:
{
cust_id: "abc123",
ord_date: ISODate("2012-11-02T17:04:11.102Z"),
state: 'CA',
price: 50,
item: apple,
color: red
}
{
cust_id: "abc123",
ord_date: ISODate("2012-11-02T17:04:11.102Z"),
state: 'WA',
price: 25,
item: apple,
color: green
}
{
cust_id: "abc123",
ord_date: ISODate("2012-11-02T17:04:11.102Z"),
state: 'CA',
price: 75,
item: orange,
color: orange
}
{
cust_id: "def456",
ord_date: ISODate("2012-11-02T17:04:11.102Z"),
state: 'OR',
price: 75,
item: apple,
color: red
}
我想计算按州分组的订单总价的总和,其中项目为“苹果”,颜色为“红色”。我的问题是:
{
$match: {$and: [{item : "apple"}, {color : "red"}]},
$group: {_id: {state: "$state", cust_id: "$cust_id"}, total: {$sum: "$price"}}
}
但是,我希望能够将我的结果cust\u id包含在\u id中,它是一个数组/映射/一些结构,其中包含构成我的合计的所有客户id的列表。因此,我希望我的输出包含
cust_id {'abc123', 'def456'}
是否有办法处理此mongo聚合/查询?或者是一种更好的方式来构造此查询,以便我可以按州分组计算红苹果的总成本,并包括属于此类别的所有客户?我把它放在\u id部分是为了提取信息,但这些数据是否包含在那里并不重要。我只想通过上述聚合选择按状态分组并获取所有客户ID的集合。
是的,在聚合$组
管道中,您可以使用$addToSet
聚合操作符将客户id添加到数组中,同时仍可以按状态分组:
db.collection.aggregate([
{
"$match": {
"item": "apple",
"color" : "red"
}
},
{
"$group": {
"_id": "$state",
"cust_id": {
"$addToSet": "$cust_id"
},
"total": {
"$sum": "$price"
}
}
}
]);
输出:
/* 1 */
{
"result" : [
{
"_id" : "OR",
"cust_id" : [
"def456"
],
"total" : 75
},
{
"_id" : "CA",
"cust_id" : [
"abc123"
],
"total" : 50
}
],
"ok" : 1
}
我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。
主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr
有人能帮我把这个mongoDB聚合转换成Spring数据mongo吗? 我试图在每个邀请函文件中获得未提醒与会者的电子邮件列表。 让它在mongo shell中运行,但需要在Spring data mongo中运行。 我的shell查询 ) 正如你们所看到的,这是我提出的,它在管道的项目和团队运作中并没有像预期的那样发挥作用。下面给出了生成的查询。 聚合对象创建 它创建以下查询 聚合对象生成的查询
>[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut
在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum
我第一次使用mongo。我正在尝试使用下面的查询聚合集合中的一些文档。相反,查询返回一个具有键“result”的对象,该键包含一个包含符合$match的所有文档的数组。 下面是查询。 以下是集合中的示例文档: 我正在尝试将所有内容按uid进行分组,每个组的总和。。。实现这一目标的正确方法是什么?