簡體   English   中英

帶有nodejs的mongodb通過聚合查找上周的數據

[英]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") }

下面的查詢應該選擇與文檔_id13991 這是代碼:

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_7ATODAY_MINUS_7B並查看結果。 結果可能並不總是相同(這取決於您運行應用程序的時間)。 有時,如果您使用的是TODAY_MINUS_7B ,則可能不會選擇帶有_id: 991的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM