如何在mongodb的日期范围内获取记录?

时间:2017-06-19 10:40:50

标签: javascript mongodb date

在我的mongodb系列中,我有一条记录:

//mongodb field: "birth_date": "1983-05-06T16:26:32.613Z" 

在这里我的查询查询,以获得该范围内的记录:

var birthYear = 1983;
var birthDateStart = new Date('1.1.' + birthYear); //Sat Jan 01 1983 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
var birthDateEnd = new Date('12.30.' + birthYear); //Fri Dec 30 1983 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
    var cursor = db.collection('users').find({
            birth_date: {$gte: birthDateStart, $lt: birthDateEnd}
        })

我认为问题是日期格式,我如何获得与数据库中相同的Date()格式?

我使用variety来获取数据库架构:

+--------------------------------------------------+
| key          | types    | occurrences | percents |
| ------------ | -------- | ----------- | -------- |
| _id          | ObjectId |           1 |    100.0 |
| bio          | String   |           1 |    100.0 |
| birth_date   | String   |           1 |    100.0 |
+--------------------------------------------------+

我使用' mongodb' express.js的包 - 并且不能使用ISODate()。

ReferenceError: ISODate is not defined

1 个答案:

答案 0 :(得分:0)

感谢您的所有提示。问题是,birth_date字段保存为String。

我想在此回答中向您展示如何在集合中的所有记录中将字段的格式从字符串更改为日期,然后在仅保存生日期时如何按年龄(以年为单位)进行搜索。也许它可以帮助别人。

将字符串格式更改为字段birth_date的日期:

mongo.connect(url, function (err, db) {
        console.log(err);
        var resultArray = [];
        var cursor = db.collection('users').find({});
        cursor.forEach(function (doc, err) {
            console.log(doc);
            db.collection('users').update({_id: doc._id}, {$set: {birth_date: new Date(doc.birth_date)}});
        }, function () {
            db.close();
            res.send("Done!");
        })
    })

找一位年满18岁的用户:

var search_age = 18;
var birthYear = new Date(Date.now()).getFullYear() - search_age;
var birthDateStart = new Date(birthYear, 0, 1);
var birthDateEnd = new Date(birthYear, 11, 31, 23, 59, 59, 999);
var resultArray = [];

mongo.connect(url, function (err, db) {
    console.log(err);
    var resultArray = [];
    var cursor = db.collection('users').find({
            birth_date: {$gte: birthDateStart, $lt: birthDateEnd},
        })
        ;
    cursor.forEach(function (doc, err) {
        resultArray.push(doc);
    }, function () {
        db.close();
        res.send(resultArray);
    })
})