![](/img/trans.png)
[英]How to get data between the two dates from mongodb using mongoose
[英]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.