我有下面的代码可以正常工作,并显示Vote
集合中MongoDB
值的100条记录降序;
var myAggregate = Entry.aggregate([{ $group: { _id: "$url",author: { $first: "$author" }, vote: { $max: "$vote" }, url: { $first: "$url" }, title: { $first: "$title" } } },{ $sort:{ vote:-1} },{ $limit: 100 }]);
// Home Route
app.get('/', function(req, res) {
myAggregate.exec(function(err, entries) {
if (err) {
console.log(err)
} else {
res.render('index', {
entries: entries
});
}
});
});
我要实现的目标是根据今天的日期过滤此数据。
我的模式如下:
{
"_id": {
"$oid": "5ec6efe565915b59f10787b4"
},
"title": "my title",
"url": "https://myurl.com",
"author": "john",
"created": {
"$date": "2020-05-22T00:17:14.340Z"
},
"vote": 51
}
我的索引页面应显示100条在 today
中创建的记录。
例如,如果我的条目是在今天的日期和时间范围内创建的,则应显示它。
我试图按照this问题的说明进行操作,但对我没有用。我收到了Arguments must be aggregate pipeline operators error
。知道我在这里缺少什么吗?
var start = new Date();
start.setHours(0,0,0,0);
var end = new Date();
end.setHours(23,59,59,999);
var myAggregate = Entry.aggregate([{ $group: { _id: "$url",author: { $first: "$author" }, vote: { $max: "$vote" }, url: { $first: "$url" }, title: { $first: "$title" } } },{ $sort:{ vote:-1} },{created: {$gte: start, $lt: end}},{ $limit: 100 }]);
答案 0 :(得分:1)
需要注意的两件事:
created
既不是聚合管道中的运算符,也不是MongoDB中的运算符。我假设您要过滤start
和end
范围内的文档,则可以替换
{created: {$gte: start, $lt: end}}
使用
{
$match: {
$expr: {
$and: [
{
$gte: [
"$created",
start
]
},
{
$lt: [
"$created",
end
]
}
]
}
}
}
created
阶段缺少$group
字段。只需添加以下内容:created: {
$first: "$created"
}