【问题标题】:How to get date from mongodb matched date using mongoose如何使用 mongoose 从 mongodb 匹配日期获取日期
【发布时间】:2020-09-27 17:11:45
【问题描述】:

我正在尝试使用 mongodb 和 mongoose 返回给定日期查询的匹配记录,但是,所有行都在返回。

以下是我的代码和模型架构。 todaydate 是 Date 类型。

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
} 

data.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);

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

【问题讨论】:

  • 是有错误还是没有得到预期的返回行?
  • @SamuelG:所有记录都来了
  • 您能否分享该列的架构定义
  • @SamuelG: 添加模式模型
  • 在您的演示中看起来一切正常。如果数据实际上没有在 MongoDB 中保存为日期,那么您将不会得到任何结果。一定有别的东西。检查正确的路线被击中等。

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2016-01-21
    • 2020-09-26
    • 2016-07-18
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多