在mongodb中查找日期

时间:2018-12-19 13:38:08

标签: node.js mongodb mongoose

我在Mongo中有一个模型(vehicleData),其中存储了一些数据,并带有以下数据:

型号:

const VehicleDataSchema = new mongoose.Schema({
  carStatus: String
}, { timestamps: true })

样本数据

{
    "_id" : ObjectId("5c177d2b6f3b4565ccb0aaf2"),
    "status" : "DRIVING",
    "createdAt" : "2018-12-17T08:47:57.788Z",
    "updatedAt" : "2018-12-17T08:47:57.788Z",
    "__v" : 0
}

我正在尝试在Node应用程序中按createdAt查询大于日期的日期。 我已经尝试过了:

let start = moment('2018-01-01')
const query = { createdAt: { $gte: start.toISOString() } }
console.log(query) //outputs { createdAt: { '$gte': '2018-01-01T02:00:00.000Z' } }
const result = await VehicleData.find(query)

这在我的节点应用程序中没有任何结果,但是如果我尝试在mongo控制台(或与RoboT或Compass之类的客户端)中使用此查询,它将使用大于日期的createAt响应输入。 有人知道我想念什么吗?

从猫鼬调试开始,我可以看到正在查询的是

vehicledatas.find({ createdAt: { '$gte': new Date("Mon, 01 Jan 2018 02:00:00 GMT") } }, { projection: {} })

1 个答案:

答案 0 :(得分:2)

数据库中日期的类型为Date,您在此处使用String将其作为.toISOString()传递

因此,请尝试立即使用.toDate()函数将其转换为日期对象

VehicleData.find({ createdAt: { $gte: moment('2018-01-01').toDate() } })

猫鼬中的timestamps选项也总是创建字段createdAt和类型DateupdatedAt