Mongo 使用日期聚合查询
Mongo query using aggregation for dates
在下面的查询中,我试图在我的 articles
collection 中查找上周创建的条目,按该文章的投票数排序。 $match
似乎不起作用(也许我不知道如何使用它)。以下查询完美运行,所以它不是日期格式问题,
db.articles.find(timestamp:{
'$lte':new Date(),
'$gte':new Date(ISODate().getTime()-7*1000*86400)}
})
但是这个没有获取任何结果。没有 $match
它也会获取所需的结果(文章按投票数排序)。
db.articles.aggregate([
{
$project:{
_id:1,
numVotes:{$subtract:[{$size:"$votes.up"},{$size:"$votes.down"}]}}
},
{
$sort:{numVotes:-1}
},
{
$match:{
timestamp:{
'$lte':new Date(),
'$gte':new Date(ISODate().getTime()-7*1000*86400)}
}
}
])
您正尝试在管道的末尾进行匹配,这假设您已经投影了时间戳字段,但您还没有这样做。
我相信你想要的是在聚合之前过滤数据,所以你应该将 match 放在聚合数组的顶部。
试试这个:
db.articles.aggregate([{
$match: {
timestamp: {
'$lte': new Date(),
'$gte': new Date(ISODate().getTime() - 7 * 1000 * 86400)
}
}
}, {
$project: {
_id: 1,
numVotes: {
$subtract: [{
$size: "$votes.up"
}, {
$size: "$votes.down"
}]
}
}
}, {
$sort: {
numVotes: -1
}
}])
在下面的查询中,我试图在我的 articles
collection 中查找上周创建的条目,按该文章的投票数排序。 $match
似乎不起作用(也许我不知道如何使用它)。以下查询完美运行,所以它不是日期格式问题,
db.articles.find(timestamp:{
'$lte':new Date(),
'$gte':new Date(ISODate().getTime()-7*1000*86400)}
})
但是这个没有获取任何结果。没有 $match
它也会获取所需的结果(文章按投票数排序)。
db.articles.aggregate([
{
$project:{
_id:1,
numVotes:{$subtract:[{$size:"$votes.up"},{$size:"$votes.down"}]}}
},
{
$sort:{numVotes:-1}
},
{
$match:{
timestamp:{
'$lte':new Date(),
'$gte':new Date(ISODate().getTime()-7*1000*86400)}
}
}
])
您正尝试在管道的末尾进行匹配,这假设您已经投影了时间戳字段,但您还没有这样做。
我相信你想要的是在聚合之前过滤数据,所以你应该将 match 放在聚合数组的顶部。
试试这个:
db.articles.aggregate([{
$match: {
timestamp: {
'$lte': new Date(),
'$gte': new Date(ISODate().getTime() - 7 * 1000 * 86400)
}
}
}, {
$project: {
_id: 1,
numVotes: {
$subtract: [{
$size: "$votes.up"
}, {
$size: "$votes.down"
}]
}
}
}, {
$sort: {
numVotes: -1
}
}])