在mongodb聚合调用中,如何使用$ group运算符将管道中的所有文档分组为单个结果?
假设我有一组看起来像这样的记录:
{
user_id: 234,
signup_date: 2013-06-27
}
Run Code Online (Sandbox Code Playgroud)
我想使用aggregate函数在数据库中查询在给定日期范围内注册的用户列表,并将其作为列表返回.我想要一个看起来像这样的结果:
{
users: [234, 235, 236]
}
Run Code Online (Sandbox Code Playgroud)
我的查询看起来像这样:
db.users.aggregate([
{ $match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}},
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我现在有一个记录子集,所有记录都有一个所需范围内的注册日期.但这是我遇到麻烦的地方.现在我想将所有这些记录分组到一个包含所有ID列表的结果中.但我不知道如何使用$ group.
{ $group: {
_id: null
users: { $addToSet: user_id }
}}
])
Run Code Online (Sandbox Code Playgroud)
当我尝试_id:null时,我找回了一个空的用户ID列表.
我可以使用find()返回所需的记录集,然后只需手动将ID处理到列表中,但使用aggregate()执行此操作似乎更清晰.我错了吗?什么是完成我所描述的最佳方式,使用聚合或不使用聚合?
小智 8
试试这个查询:
db.users.aggregate([
{
$match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}
}
},
{
$group: {
_id: null,
users: {
$addToSet: "$user_id"
}
}
}
])
Run Code Online (Sandbox Code Playgroud)