在下面的查询中,我试图在我的articles
集合中查找上周所做的条目,并按该文章的投票数排序。$match
似乎不起作用(也许我不知道如何使用它)。下面的查询工作得很好,因此不是日期格式问题,
db.articles.find(timestamp:{
'$lte':new Date(),
'$gte':new Date(ISODate().getTime()-7*1000*86400)}
})
但是这个没有任何结果。如果没有
$match
,它也会获取所需的结果(按votecount排序的文章)。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
}
}])
关于mongodb - 使用聚合日期的Mongo查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33629403/