日期查询可在Mongo Shell中使用,但不适用于Node

时间:2018-08-22 13:21:35

标签: node.js mongodb mongoose

当我从Mongo shell运行以下查询时,它运行正常:

db.reports.find({
  dateTime: { 
    $gte: "2018-06-12T05:00:00.000Z",
    $lte: "2018-06-15T05:00:00.000Z",
  }
}

给出结果:

{ 
  "_id" : "5b3eaf388213fa2f5026ed26", 
  "report_id" : "1", 
  "description": "test description 1",
  "address" : "300-BLK Hilliard Ave",
  dateTime" : "2018-06-13T04:00:00.000Z"
},
{ 
  "_id" : "5b3eaf388213fa2f5026ed27", 
  "report_id" : "2", 
  "description": "test description 2",
  "address" : "1600-BLK Patton Ave",
  dateTime" : "2018-06-13T04:00:00.000Z"
},
{ 
  "_id" : "5b3eaf388213fa2f5026ed28", 
  "report_id" : "3", 
  "description": "test description 3",
  "address" : " ",
  dateTime" : "2018-06-14T04:00:00.000Z"
}

但是当我尝试在Node脚本中执行它时,它返回一个空数组:

reportModel.find({
  dateTime: { 
    $gte: "2018-06-12T05:00:00.000Z",
    $lte: "2018-06-15T05:00:00.000Z",
  }, (err, reports) => {
    if (err) {
      reject(err) 
    }
    resolve(reports)
}

我知道它正在连接到数据库,因为我在其他属性上运行的查询都返回了期望值。

我的report模型是:

const report = new mongoose.Schema({
  report_id: { type: String, default: '' }
  description: { type: String, default: '' }      
  address: { type: String, default: '' }
  dateTime: { type: Date, default: Date.now }
})

我尝试了new Date()new ISODate()的各种包装,如此处的各种答案所建议,无济于事。知道有什么问题吗?

1 个答案:

答案 0 :(得分:1)

Mongoose模式中的数据类型需要与已保存文档中的数据类型匹配。因此,因为查询在外壳中起作用,所以您的dateTime字段必须是文档中的字符串,并且架构定义应类似于:

const report = new mongoose.Schema({
  report_id: { type: String, default: '' }
  description: { type: String, default: '' }      
  address: { type: String, default: '' }
  dateTime: { type: String, default: Date.now }
})

但是,您可能需要考虑将dateTime的值存储为Date,以提高效率和灵活性。