我尝试构建查询以返回符合此条件的所有帐户的ObjectId:
我能够做#1和#2,但我坚持#3并且还在结果中包含ObjectId。
Account._get_collection().aggregate([
{ "$match": {
"status": { "$ne": -1 },
"created_at": { "$lte": datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) - datetime.timedelta(days=30), }
}},
{ "$group": {
"_id": {
"dayOfMonth" : { "$dayOfMonth": "$created_at" },
},
}},
{ "$project": {
"_id": "1"
}}
])
我知道月份的日期可能应该在匹配部分中,并且需要将某些内容添加到组部分以返回ObjectIds。
我错过了什么?
答案 0 :(得分:1)
修改$group
和$project
阶段,如下所示。您需要跟踪组中所有记录的Object Ids
,以便稍后进行投影。因此,在分组时,使用运算符$push
来累积每个组的所有对象ID。
在project
阶段,只需显示它。
您的代码不正确,因为它投影的是每个组的"_id"
(dayOfMonth
),而不是文档本身。
{ "$group": {
"_id": {
"dayOfMonth" : { "$dayOfMonth": "$created_at" },
},"objectIds":{$push:"$_id"}
}},
{ "$project": {
"objectIds": 1
}}