簡體   English   中英

如何使用 mongoose 在 mongodb 中的兩天之間從 mongodb 獲取數據

[英]How to get data from mongodb between including two days in mongodb using mongoose

試圖在兩天之間從 mongodb 獲取記錄,但在我的代碼中只有兩天之間。

例子:

01-06-2020 到 08-06-2020 = 獲取 02-06-2020 到 08-06-2020 的記錄(01-06-2020 缺失)

但我想要 01-06-2020 到 08-06-2020 = 需要從 01-06-2020 到 08-06-2020 獲取記錄。

如何得到它?

Mongodb 數據:

{ 
_id:ObjectId("5edd1df67b272e2d4cf36f70"),
pname:"Test 1", 
category:"Choco 1",
todaydate:2020-06-01T18:30:00.000+00:00
},
{ 
_id:ObjectId("5gdd1df67b272e2d4cf36f72"),
pname:"Test 2", 
category:"Choco 3",
todaydate: 2020-06-02T18:30:00.000+00:00
},
{ 
_id:ObjectId("5kdd1df67b272e2d4cf36f74"),
pname:"Test 5", 
category:"Choco 6",
todaydate: 2020-05-01T18:30:00.000+00:00
},
{ 
_id:ObjectId("5ewd1df67b272e2d4cf36f75"),
pname:"Test 6", 
category:"Choco 8",
todaydate: 2020-06-03T18:30:00.000+00:00
},
{ 
_id:ObjectId("5sdd1df67b272e2d4cf36f76"),
pname:"Test 3", 
category:"Choco 9",
todaydate: 2020-06-04T18:30:00.000+00:00
},
{ 
_id:ObjectId("5tdd1df67b272e2d4cf36f78"),
pname:"Test 11", 
category:"Choco 10",
todaydate: 2020-06-05T18:30:00.000+00:00
}

數據.model.js:

const mongoose = require('mongoose'); 
var userSchemaDate = new mongoose.Schema({ 
    pname: {
        type: String
    },  
    category: {
        type: String
    },  
    todaydate: {
        type: Date
    }   
}, {
    versionKey: false,
    collection: 'data'
}); 

module.exports = mongoose.model('Data', userSchemaDate);

數據.controller.js:

module.exports.getReportTableData = (req, res, next) => {
    var collection = req.query.collection; 
    let tableReportdata = dbc.model(collection);

    let date1 = "01-06-2020"; dd/mm/yyyy
    let date2 = "07-06-2020"; dd/mm/yyyy

    tableReportdata.find({
            $and: [{
                    todaydate: {
                        $gt: date1
                    }
                },
                {
                    todaydate: {
                        $lt: date2
                    }
                }
            ]
        }, function(err, docs) {
            if (err) {
                console.log(err);
                return;
            } else {
                console.log("Successful loaded report data"); 
                res.json({ data: docs, msg: 'Report data loaded.' });
            }
        });
   }

您其他問題的答案應該返回正確的結果。 我還要強調,最好將日期存儲為日期 object。

讓我們嘗試另一種方法,在輸入值上也使用$dateFromString

tableReportdata.find({
  $expr: {
    $and: [
      {
        $gte: [
          {
            $dateFromString: {
              dateString: "$todaydate",
              format: "%d-%m-%Y",
              timezone: "UTC"
            }
          },
          {
            $dateFromString: {
              dateString: "01-06-2020",
              format: "%d-%m-%Y",
              timezone: "UTC"
            }
          }
        ]
      },
      {
        $lte: [
          {
            $dateFromString: {
              dateString: "$todaydate",
              format: "%d-%m-%Y",
              timezone: "UTC"
            }
          },
          {
            $dateFromString: {
              dateString: "07-06-2020",
              format: "%d-%m-%Y",
              timezone: "UTC"
            }
          }
        ]
      }
    ]
  }
}, function(err, docs) {
  if (err) {
    console.log(err);
    return;
  } else {
    console.log("Successful loaded report data"); 
    res.json({ data: docs, msg: 'Report data loaded.' });
  }
});

帶助手的較短版本 function

const dateUTCexpr = (dateString) => ({
  $dateFromString: {
    dateString,
    format: "%d-%m-%Y",
    timezone: "UTC"
  }
})

tableReportdata.find({
  $expr: {
    $and: [
      {
        $gte: [dateUTCexpr("$todaydate"), dateUTCexpr("01-06-2020")]
      },
      {
        $lte: [dateUTCexpr("$todaydate"), dateUTCexpr("07-06-2020")]
      }
    ]
  }
}, function(err, docs) {
  if (err) {
    console.log(err);
    return;
  } else {
    console.log("Successful loaded report data"); 
    res.json({ data: docs, msg: 'Report data loaded.' });
  }
});

如果您在架構todaydate定義為String ,還要確保它在您的數據庫中正確轉換,您可以使用以下代碼

const dateUTCexpr = (dateString) => ({
  $dateFromString: {
    dateString,
    format: "%d-%m-%Y",
    timezone: "UTC"
  }
})

tableReportdata.find({
  todaydate: {
    $gte: dateUTCexpr("01-06-2020"),
    $lte: dateUTCexpr("07-06-2020")
  }
}, function(err, docs) {
  if (err) {
    console.log(err);
    return;
  } else {
    console.log("Successful loaded report data"); 
    res.json({ data: docs, msg: 'Report data loaded.' });
  }
});

暫無
暫無

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

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