我正在尝试使用mongo中的聚合框架计算每天的转推和推文数量,但我遇到了问题。我可以单独做,但当我尝试只使用查询时,我没有得到任何结果。
我使用下一个聚合框架来获取每天转发的数量
db.tweets.aggregate(
[
{ $match: { "retweeted_status.id": {"$exists":true} }}
{
$group:
{
_id: {
day2: { $dayOfMonth: "$created_ts"},
month2 : {$month : "$created_ts" },
year2: { $year: "$created_ts" },
},
totalReTweetsPerDay: { $sum: 1 },
}
},
{ $match: { "retweeted_status.id": {"$exists":true} }}
]
)
我使用下一个代码来获取每天的推文数量
db.tweets.aggregate(
[
{
$group:
{
_id: {
day: { $dayOfMonth: "$created_ts"},
month : {$month : "$created_ts" },
year: { $year: "$created_ts" },
},
totalReTweetsPerDay: { $sum: 1 },
}
},
{$sort : { _id : -1}},
{$out : "daily_tweets" }
]
)
我想将这两项行动合二为一。我试图加入它只有一个在另一个里面但它没有用。
非常感谢,
答案 0 :(得分:1)
您可以尝试以下聚合。唯一需要注意的是ifNull
运算符的包含,它检查字段是否存在。
db.tweets.aggregate(
[{
$group: {
_id: {
day: {
$dayOfMonth: "$created_ts"
},
month: {
$month: "$created_ts"
},
year: {
$year: "$created_ts"
},
},
totalReTweetsPerDay: {
$sum: {
$cond: [{
$ifNull: ["$retweeted_status.id", false]
}, 1, 0]
}
},
totalTweetsPerDay: {
$sum: 1
}
}
}, {
$sort: {
_id: -1
}
}, {
$out: "daily_tweets"
}]
)