使用用户首选项数据进行聚合
在本页面
考虑一个假设的体育俱乐部,其数据库包含一个
users
集合,用于跟踪用户的加入日期,运动偏好,并将这些数据存储在类似于以下内容的文档中:{
_id : “jane“,
joined : ISODate(“2011-03-02“),
likes : [“golf“, “racquetball“]
}
{
_id : “joe“,
joined : ISODate(“2012-07-02“),
likes : [“tennis“, “golf“, “swimming“]
}
以下操作以大写和字母 order 返回用户名。聚合包括
users
集合中所有文档的用户名。您可以这样做以规范化用户名以进行处理。db.users.aggregate([
{ $project : { name:{$toUpper:“$_id“} , _id:0 } },
{ $sort : { name : 1 } }
])
users
集合中的所有文档都通过管道传递,该管道包含以下操作:聚合的结果类似于以下内容:
{
"name" : "JANE"
},
{
"name" : "JILL"
},
{
"name" : "JOE"
}
以下聚合操作返回按其加入的月份排序的用户名。这种聚合可以帮助生成会员续订通知。
db.users.aggregate([
{ $project :
{
month_joined : { $month : “$joined“ },
name : “$_id“,
_id : 0
}
},
{ $sort : { month_joined : 1 } }
])
管道通过以下操作传递
users
集合中的所有文档:- 创建两个新字段:
month_joined
和name
。
该操作返回类似于以下内容的结果:
{
“month_joined“ : 1,
“name“ : “ruth“
},
{
“month_joined“ : 1,
“name“ : “harold“
},
{
“month_joined“ : 1,
“name“ : “kate“
},
{
“month_joined“ : 2,
“name“ : “jill“
}
以下操作显示了一年中每个月加入的人数。您可以将此汇总数据用于招聘和营销策略。
db.users.aggregate([
{ $project : { month_joined : { $month : “$joined“ } } } ,
{ $group : { _id : {month_joined:“$month_joined“} , number : { $sum : 1 } } },
{ $sort : { “_id.month_joined“ : 1 } }
])
管道通过以下操作传递
users
集合中的所有文档:此聚合操作的结果类似于以下内容:
{
“_id“ : {
“month_joined“ : 1
},
“number“ : 3
},
{
“_id“ : {
“month_joined“ : 2
},
“number“ : 9
},
{
“_id“ : {
“month_joined“ : 3
},
“number“ : 5
}
以下聚合收集数据集中前五个最“喜欢”的活动。这种分析有助于规划和未来发展。
db.users.aggregate([
{ $unwind : “$likes“ },
{ $group : { _id : “$likes“ , number : { $sum : 1 } } },
{ $sort : { number : -1 } },
{ $limit : 5 }
])
管道从
users
集合中的所有文档开始,并通过以下操作传递这些文档:[success] 例子给出来自用户集合的以下文档:{_id : "jane",joined : ISODate("2011-03-02"),likes : ["golf", "racquetball"]}$unwind
运算符将创建下列文件:{_id : “jane“,joined : ISODate(“2011-03-02“),likes : “golf“}{_id : “jane“,joined : ISODate(“2011-03-02“),likes : “racquetball“}
聚合的结果类似于以下内容:
{
“_id“ : “golf“,
“number“ : 33
},
{
“_id“ : “racquetball“,
“number“ : 31
},
{
“_id“ : “swimming“,
“number“ : 24
},
{
“_id“ : “handball“,
“number“ : 19
},
{
“_id“ : “tennis“,
“number“ : 18
}
译者:李冠飞
校对:李冠飞
最近更新 1yr ago