Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查询日期存储为字符串的mongodb_Javascript_Mongodb_Date_Datetime_Mongodb Query - Fatal编程技术网

Javascript 如何查询日期存储为字符串的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

嗨,我有一个mongodb数据库和员工集合。集合中的文档如下所示-

{
  "_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”