首页 > 解决方案 > 如何使用 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.' });
            }
        }); 
     }

标签: node.jsmongodbmongoosemongodb-query

解决方案


我在您的示例中看不到任何有问题的东西——假设您的系统时钟没有完全关闭。

作为参考,这里有一个代码片段供您查看以与您的代码进行比较:

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);
});

推荐阅读