MongoDB聚合:将所有记录分组为一个结果
在mongodb聚合调用中,如何使用$group操作符将管道中的所有文档分组到单个结果中 假设我有一组记录,看起来像这样:MongoDB聚合:将所有记录分组为一个结果,mongodb,database,Mongodb,Database,在mongodb聚合调用中,如何使用$group操作符将管道中的所有文档分组到单个结果中 假设我有一组记录,看起来像这样: { user_id: 234, signup_date: 2013-06-27 } { users: [234, 235, 236] } db.users.aggregate([ { $match: { signup_date: { $gte: date_begin_variable,
{
user_id: 234,
signup_date: 2013-06-27
}
{
users: [234, 235, 236]
}
db.users.aggregate([
{ $match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}},
我想使用聚合函数查询数据库中在给定日期范围内注册的用户列表,并将其作为列表返回。我希望得到如下结果:
{
user_id: 234,
signup_date: 2013-06-27
}
{
users: [234, 235, 236]
}
db.users.aggregate([
{ $match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}},
我的查询如下所示:
{
user_id: 234,
signup_date: 2013-06-27
}
{
users: [234, 235, 236]
}
db.users.aggregate([
{ $match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}},
到目前为止,一切顺利。我现在有一部分记录,所有记录的注册日期都在期望的范围内。但这就是我遇到麻烦的地方。现在,我想将所有这些记录分组到一个包含所有ID列表的结果中。但我不知道如何使用$group实现这一点
{ $group: {
_id: null
users: { $addToSet: user_id }
}}
])
当我尝试_id:null时,我得到了一个空的用户id列表
我可以使用find()返回所需的记录集,然后手动将ID处理到列表中,但使用aggregate()这样做似乎更干净。我错了吗?使用聚合或不使用聚合,实现我描述的内容的最佳方法是什么?尝试以下查询:
db.users.aggregate([
{
$match: {
signup_date: {
$gte: date_begin_variable,
$lt: date_end_variable
}
}
},
{
$group: {
_id: null,
users: {
$addToSet: "$user_id"
}
}
}
])
_id:null是正确的,怎么“不工作”?(说“它不起作用”不是一个很好的问题,因为我们不知道你期望的输出是什么,以及你得到了什么)你目前得到的输出是什么?很抱歉,不够清晰。当我尝试_id:null时,我得到了一个空的用户id列表。如果这是正确的方法,我将返回并检查我的代码。请尝试以下方法:
users:{$addToSet:'$user_id'}
我找到了答案。早些时候,我在管道中添加了另一个$group
操作,这样user\u id
字段被重命名为\u id
,因此当我执行$addToSet:user\u id
时,它失败了,因为不再有名为user\u id
的字段。我将该行更改为$addToSet:\u id
,现在它可以正常工作了。感谢您提示\u id:null
是正确的方法。这让我不再专注于这一部分,而是发现我的代码到底出了什么问题。