Node.js 在mongodb中查找日期

Node.js 在mongodb中查找日期,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在Mongo中有一个模型(vehicleData),其中存储了一些数据,其中包含以下数据: 型号: const VehicleDataSchema = new mongoose.Schema({ carStatus: String }, { timestamps: true }) 样本数据 { "_id" : ObjectId("5c177d2b6f3b4565ccb0aaf2"), "status" : "DRIVING", "createdAt" : "201

我在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
}
我试图在节点应用程序中通过大于日期的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响应条目。 有人知道我错过了什么吗

通过mongoose的调试,我可以看到正在查询的是

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

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

所以,试着用moment中的函数将其转换为date对象

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

此外,mongoose中的选项总是创建字段
createdAt
和类型try
new Date('2018-01-01').toISOString()
以及您使用的mongoose版本?@AnouarKacem from my package.json:“mongoose”:“^5.0.18”我已经尝试了您的建议,同样的问题。我发现了这个问题:createdAt和updatedAt被存储为字符串,而不是ISODate。我已经更新了值,并将它们转换为ISODate,现在查询工作了。我必须找出为什么它们被存储为字符串而不是日期。然后是模式问题。这里使用
时间戳
选项将它声明为日期,并使用
字符串
类型查找它。该死,我知道发生了什么。这不是模式的问题。我通过ctrl+c和ctrl+v从另一个数据库复制了这些数据,然后通过RoboT client的界面保存这些数据,并将其粘贴为纯文本。我的错:-(