[英]mongodb with nodejs find data in last week with aggregation
我想獲取上周的數據,並且總是在 mongo shell 中我可以通過
{created:{$gte: new Date(ISODate().getTime() - 7*24*60*60*1000) }},
但是我如何在 nodejs iam 中使用 nodejs、mongodb、aggregation 做到這一點
您可以像這樣進行聚合:
db.collecton.aggregate([
{
$match: {
created: { $gte: new Date().getTime() - 7*24*60*60*1000 }
}
}
])
我解決了我的問題
Product.aggregate([ {$match :{created: {
$gte: new Date(new Date().getTime()-7*24*60*60*1000)
}}}],function(err,products){
res.send(products)
})
到達最后一周日期的方式會影響結果。 假設今天的日期是24-Mar-2020
,我有以下文件可以從中選擇最后一周的數據(假設今天包括周數據):
{ "_id" : 1, "createdOn" : ISODate("2020-03-21T12:05:00Z") }
{ "_id" : 3, "createdOn" : ISODate("2020-03-24T01:56:00Z") }
{ "_id" : 99, "createdOn" : ISODate("2020-03-15T12:05:00Z") }
{ "_id" : 991, "createdOn" : ISODate("2020-03-18T00:05:00Z") }
下面的查詢應該選擇與文檔_id
的1
, 3
和991
。 這是代碼:
const coll = db.collection('collection');
const today = new Date();
const ymdStr = today.getFullYear() + "-" + (today.getMonth() + 1 ) + "-" + today.getDate();
const TODAY_MINUS_7_A = new Date(Date.parse(ymdStr) - (7 * 24 * 60 * 60 * 1000));
const TODAY_MINUS_7_B = new Date(new Date() - (7*24*60*60*1000));
console.log("TODAY_MINUS_7 A, B", TODAY_MINUS_7A, TODAY_MINUS_7B);
const matchStage = { $match: { createdOn: { $gte: TODAY_MINUS_7A } } };
col.aggregate( [matchStage] ).toArray( ( err, docs ) => {
console.log("Aggregation output:");
console.log( JSON.stringify( docs ) );
// ...
在$match
階段嘗試使用TODAY_MINUS_7A
和TODAY_MINUS_7B
並查看結果。 結果可能並不總是相同(這取決於您運行應用程序的時間)。 有時,如果您使用的是TODAY_MINUS_7B
,則可能不會選擇帶有_id: 991
的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.