查询猫鼬并按日期过滤

时间:2015-03-12 01:48:57

标签: node.js mongoose

我在mongoose文档enter image description here

中有这个级别

我试图制作一个过滤器来填充某个日期范围内的位置的几何体。

我尝试这样的事情:

.populate('geometries', null, { 'locations.properties.timeStamp': { $gt: startDate, $lt: endDate }})
.exec(function(err, item) {
//some code
}

就像这样:

 .populate('geometries')
 .where({ 'locations.properties.timeStamp': { $gt: startDate, $lt: endDate }}*/)
 .exec(function(err, item) {
    //some code
    }

使用这些查询,我无法访问timeStamp进行比较,结果为null或未定义。

编辑1:

变量startDate和endDate来自angulars控制器的url,它们的定义如下:

            var deductDate = new Date(endDate);
            var startDate = deductDate.setDate(deductDate.getDate()-1);

            Item.currentDay($stateParams.epc, url, {
                groupBy: '1d',
                endDate: moment(endDate).format(),
                startDate: moment(startDate).format('YYYY-MM-DD') + "T23:59:59"
            });

在API中,处理它的GET路由是:

 handler: function(request, reply) {
  var startDate = request.query.startDate;
  var endDate = request.query.endDate;
  Item.findById(request.params.id)
    .populate('geometries', null, { 'locations.properties.timeStamp': { $gt: startDate, $lt: endDate }})
    .exec(function(err, item) {
      if (err) {
        reply(err);
      } else {
        reply(item);
      }
    });
}

2 个答案:

答案 0 :(得分:1)

尝试这样做:

.populate({
  path: 'geometries',
  match: { 'locations.properties.timeStamp': { $gt: startDate, $lt: endDate    }},
}).exec()

从关于查询条件和其他选项(http://mongoosejs.com/docs/populate.html

的mongoose文档中提取

答案 1 :(得分:0)

这样做:

  var startDate = new Date(request.query.startDate);
  var endDate = new Date(request.query.endDate);