如何查找大于特定时间戳的文档?

时间:2017-05-25 17:07:52

标签: javascript mongodb mongoose

我有一组JSON对象都有时间戳。这是我的模特:

'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var PriceSchema = new Schema({
  high: {
    type: Number
  },
  last: {
    type: Number
  },
  timestamp: {
    type: Number
  },
  bid: {
    type: Number
  },
  vwap: {
    type: Number
  },
  volume: {
    type: Number
  },
  low: {
    type: Number
  },
  ask: {
    type: Number
  },
  open: {
    type: Number
  }
});

module.exports = mongoose.model('Prices', PriceSchema);

现在我想编写一个方法,在数据库中搜索与当天相对应的所有条目。所以我检查当前时间,然后查询比昨天更旧的所有内容:

'use strict';

var mongoose = require('mongoose'),
  moment = require('moment'),
  Price = mongoose.model('Prices');

exports.list_current_day = function(req, res) {
  var now = moment().valueOf()
  var oneDayAgo = now - 86400000

  Price.findOne({ 'timestamp' > oneDayAgo }, function (err, price) {
    if (err) return handleError(err);
    res.json(price)
  })

}

但我的情况失败了。我得到Unexpected token >。如何指定搜索查询的条件以使用timestamp > currentDay返回所有内容?

1 个答案:

答案 0 :(得分:0)

您的查询已关闭。 findOne将对象作为描述目标文档属性的第一个参数。您收到错误的原因是对象文字中的<标记无效且语法无效。相反,请尝试以下方法:

Price.findOne({
  timestamp: {
    $gt: oneDayAgo
  }
}, function (err, price) {
  if (err) return handleError(err);
  res.json(price)
});

这将使用查询中的$gt运算符来检查某个属性是否符合要求。根据MongoDB文档:

  

$gt

     

语法{field: {$gt: value} }

     

$gt选择field的值大于(>)指定value的文档。

因此,它将选择timestamp字段大于oneDayAgo的文档。