Mongoose如何在两个不同的日期内找到文档?

时间:2017-07-03 20:38:01

标签: node.js mongodb mongoose

这是我的天气模型:

// Declare schema
var weatherSchema = Schema({
    data: {
        type: Object
    },
    date: {
        type: String,
        required: true
    },
    created_at: {
        type: Date,
        default: Date.now,
        index: 1
    }
});

date字段中,我存储2017-7-1,2017-7-2,2017-7-3等日期

现在我在这张天气表中有很多文档,例如2017-6-20到2017-7-3。

所以我想仅从2017-7-12017-7-2检索文档:

Weather
.find({})
.where('date').gt('2017-7-1').lt('2017-7-2')
.exec(function (err, docs) {
    console.log(docs);
    if (err) {
        res.set('Content-Type', 'application/json');
        return res.sendStatus(-1);
    }

    if (!docs) {
        res.set('Content-Type', 'application/json');
        return res.status(200).send('Not weather data found.');
    }
    // return docs as json.
    return res.status(200).json(docs);
});

但我得到的是[]。我做错了什么?

有什么想法吗?

修改

official format above 有效,但它适用于以下格式:

var options =  {
    "date": {
        "$gte": start,
        "$lt": end
    }
}

Weather
.find(options, function (err, docs) {
    console.log(docs);
    if (err) {
        res.set('Content-Type', 'application/json');
        return res.status(200).send('Error occurs: ' + err);
    }

    if (!docs) {
        res.set('Content-Type', 'application/json');
        return res.status(200).send('Not weather data found.');
    }
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET,POST,DELETE');

    // return docs as json.
    return res.status(200).json(docs);
}).select("-created_at -_id -__v");

为什么?

1 个答案:

答案 0 :(得分:1)

要比较date字段应为Date类型的日期。然后你可以搜索:

.where('date').gt(new Date('2017-7-1')).lt(new Date('2017-7-2'))

或者如果您想将日期用作字符串,可以像这样搜索:

.where('date').in(['2017-7-1', '2017-7-2'])

此查询将查找具有完全日期字符串('2017-7-1'或'2017-7-2')

的条目