如何在特定日期之间从mongoDB中获取数据(日期在文档中存储为createdOn)?

时间:2018-10-31 07:03:19

标签: javascript node.js mongodb

这是我的查询-

  var Query = Offer
    .where('isDeleted').equals(false)
    .populate('country')
    .populate('state')
    .populate('city')
    .populate('store')
    .populate("createdBy")
    .populate("main_cat")
    .populate("grab_by")
    .populate("merchant_id")
    .sort('store_name');

if (typeof querydata.country != 'undefined' && querydata.country !== '') {
    Query.where('country').in(querydata.country)
}
if (querydata.state.length > 0) {

    querydata.state = querydata.state.split(",");
    Query.where('state').in(querydata.state);
}
if (querydata.city.length > 0) {
    querydata.city = querydata.city.split(",");
    Query.where('city').in(querydata.city);
}
//here i am trying to get data from start to end date
if ((req.query.start_date !== '' && typeof req.query.start_date !== 'undefined') && (req.query.end_date !== '' && typeof req.query.end_date !== 'undefined')) {
    var startdate = new Date(req.query.start_date);
    var enddate = new Date(req.query.end_date);
    //(startdate);
    enddate.setDate(enddate.getDate() + 1);
    Query.where(('createdOn').split('T')[0]).gte(startdate).lte(enddate);
}

在其他情况下,我尝试在开始日期和结束日期之间尝试到达的位置。请建议我该如何写同样的查询。我应该同样使用momentJS吗? 该代码的主要目的是获取日期之间的数据,该日期将由用户以CSV格式下载。

这是文档的架构:enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用$gte$lte运算符来过滤日期范围内的数据。

要在Offer集合中进行搜索,查询将是:

db.Offer.find({createdOn: {$gte: ISODate('START_DATE'),$lte: ISODate('END_DATE')}})

在使用MongoDB Compass时,只需在filter过滤器字段中输入以下内容:(在“模式”选项卡中)

{createdOn: {$gte: ISODate('START_DATE'),$lte: ISODate('END_DATE')}}