node.js - 如何使用 mongoose 从 mongodb 匹配日期获取日期
问题描述
我正在尝试使用 mongodb 和 mongoose 返回给定日期查询的匹配记录,但是,所有行都在返回。
下面是我的代码和模型架构。todaydate
是日期类型。
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
}
数据模型.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);
data.controller.js:
module.exports.getReportTableData = (req, res, next) => {
var collection = req.query.collection;
let tabledata = dbc.model(collection);
let reportPar = new Date("2020-06-03"); //yyyy-mm-dd
tabledata.find({
todaydate: {
$gte: reportPar
}
}, function(err, docs) {
if (err) {
console.log(err);
return;
} else {
console.log("Successful loaded data");
res.json({ data: docs, msg: 'Data loaded.' });
}
});
}
解决方案
我在您的示例中看不到任何有问题的东西——假设您的系统时钟没有完全关闭。
作为参考,这里有一个代码片段供您查看以与您的代码进行比较:
mongoose.connect(`mongodb://localhost/tests`, {useNewUrlParser: true, useUnifiedTopology: true, autoIndex: false});
const db = mongoose.connection;
db.on('error', (err) => {
console.error(err);
});
db.once('open', async () => {
// wipe the table
const collections = await db.db.collections();
if (collections.map(c => c.s.namespace.collection).includes('datetests')) {
await db.db.collection('datetests').drop();
}
// define schema
const schema = new Schema(
{
todaydate: {
type: Date,
required: true
}
},
{
versionKey: false,
timestamps: false
}
);
const Test = mongoose.model('datetest', schema);
// insert a week's dates
let start = new Date('2020-06-02');
for(let i = 0; i < 7; i++) {
const date = new Date(start.valueOf());
date.setDate(start.getDate() + i);
await Test.create({
todaydate: date
});
}
let result = await Test.find({
todaydate: {
$gte: new Date('2020-06-02'), $lte: new Date('2020-06-02')
}
}).exec();
assert.ok(result.length === 1);
result = await Test.find({
todaydate: {
$gte: new Date('2020-06-02'), $lte: new Date('2020-06-03')
}
}).exec();
assert.ok(result.length === 2);
result = await Test.find({
todaydate: {
$gte: new Date('2020-06-02'), $lte: new Date('2020-06-05')
}
}).exec();
assert.ok(result.length === 4);
result = await Test.find({
todaydate: {
$gte: new Date('2020-06-02'), $lte: new Date('2020-06-08')
}
}).exec();
assert.ok(result.length === 7);
});
推荐阅读
- arduino - 为什么我的程序中的 if 语句不起作用?
- javascript - 如何在没有 Node.js 的情况下使用 React-Table?
- android - AAPT:错误:意外元素
在发现 - flutter - Flutter 中的多设备离线优先数据库同步如何与 iOS/Android 协同工作?
- scss-mixins - 将 CSS 类附加到 Mixin 父级
- r - 如何使用单列数据创建条形图?
- arrays - 打印以元素 x 为中心的二维数组的函数
- angular - 递归 array.push() 的问题
- java - 如果表格在 JPanel 中,如何将表格向左移动?
- javascript - 为什么 React 组件库像 ant design bundle 和 transpile 一样同时进行?