Javascript 如何查询日期存储为字符串的mongodb
嗨,我有一个mongodb数据库和员工集合。集合中的文档如下所示-Javascript 如何查询日期存储为字符串的mongodb,javascript,mongodb,date,datetime,mongodb-query,Javascript,Mongodb,Date,Datetime,Mongodb Query,嗨,我有一个mongodb数据库和员工集合。集合中的文档如下所示- { "_id": { "$oid": "5fac29ace10c301364931902" }, "id": 11, "first_name": "Kristi", "last_name": "Dorkins", "email&q
{
"_id": {
"$oid": "5fac29ace10c301364931902"
},
"id": 11,
"first_name": "Kristi",
"last_name": "Dorkins",
"email": "kdorkinsa@livejournal.com",
"gender": "Female",
"startDate": "07/04/2012",
"endDate": "30/03/2019",
"deviceStatus": true
}
我需要“startDate”大于特定日期(我从前端传递到服务器)的员工。
我传递给服务器的日期格式如下所示-
2020-11-14T10:36:21.053Z
由于数据库中的日期是字符串格式(“11/05/2011”),我找不到方法将其转换为查询语句中的实际日期对象
let temp = new Date(req.query.startDate);
dbase.collection("employee").find({new Date(startDate): { $gte: new Date(temp) }})
.toArray()
.then((res) => console.log(res));
在上面的查询中,我尝试创建键('startDate')的日期对象,但似乎不可能
当我尝试用一种不同的方式来测试-
dbase.collection("employee").find({startDate: { $gte: "02/11/2010" }})
.toArray()
.then((result) => {
console.log(result.length);
res.send(result);
});
对于上面的查询,我将获取startDate的前两位数大于给定日期的前两位数(在上述情况下大于“2”)的所有文档。这也行不通
我已经讨论过这个线程和其他类似的问题,但它们都以ISO或其他格式将日期键存储在数据库中。
另外,因为我是MongoDB的新手,我尝试了所有我知道的可能的方法。请帮助您可以使用 只有一个字段的示例更易于阅读 Mongo查询如下:
db.collection.aggregate([
{
“$set”:{
“起始日期”:{
“$dateFromString”:{
“日期字符串”:“$startDate”,
格式“:“%d/%m/%Y”
}
}
}
},
{
“$match”:{
“起始日期”:{
“$gte”:你的约会
}
}
}
])
使用
$dateFromString
使用$dateFromString
使用$set
将解析的日期替换为ISODate
字段,然后您可以$match
匹配开始日期更大的字段(或其他)您的日期。最好将startDate
转换为日期对象,然后与输入的日期对象(即new date())进行比较。要将字符串日期转换为日期对象,请使用运算符。此运算符需要与$expr
运算符一起使用。@prasad_u“我收到此错误”MongoError:error解析日期字符串“23/09/2011”;0:Unexpected character“2”。我认为在使用字符串date上的$datefromstring时感谢您的回答。但是我应该在$match中输入什么呢?我不是在找“Id”,而是在找“startDate”$gte“input date”。我对这有点陌生。。因此,请您仔细删除第一个$match
阶段。答案更新。谢谢,我对你的答案投了赞成票。还有一件事,我正在node.js中使用mongoDb。那么如何从这个查询中提取数据呢?对于node.js,我只在mongoose
中使用了mongo,所以我不知道语法如何,但我支持当运行查询时,返回的对象与。比如var find=mongo.find(查询);console.log(query.startDate)代码>应该可以工作。但是我没有在node.js中使用没有mongoose的mongo,所以我真的不知道;0:意外的字符“2”