使用$gte和&;lte mongo运营商,如果日期在mongodb中为字符串格式

使用$gte和&;lte mongo运营商,如果日期在mongodb中为字符串格式,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我在数据库中有类似于{dob:“02-23-2000”}的dob字段。现在我想对字符串格式的dob字段执行$gte和<e,如下所示: db.panelists.count({"dob":{ '$gte': '08-02-1998', '$lte': '08-02-2003' }}); 我得到的计数值始终为零 任何人都可以帮助我以相同的dob格式解决此查询。您可以在mongodb3.6中尝试下面的聚合 您可以使用聚合将您的dob从 字符串到日期,然后轻松地将应用于该字符串的文档 1)使用聚合

我在数据库中有类似于
{dob:“02-23-2000”}
的dob字段。现在我想对字符串格式的dob字段执行
$gte
<e
,如下所示:

db.panelists.count({"dob":{ '$gte': '08-02-1998', '$lte': '08-02-2003' }});
我得到的计数值始终为零


任何人都可以帮助我以相同的dob格式解决此查询。

您可以在mongodb3.6中尝试下面的聚合

您可以使用聚合将您的
dob
从 字符串到日期,然后轻松地将应用于该字符串的文档

1)使用聚合

2)使用简单查找查询

3)使用聚合


mongodb版本?@AnthonyWinzlet我使用的是3.6 db verionOr,如果字符串是正确的ISO8601,字符串比较也可以工作。@SergioTulentsev是的,但作为OP以字符串格式存储dob,这就是为什么对话是正确的needed@AnthonyWinzlet我收到错误“ReferenceError:未定义时刻”当我在谷歌上搜索这个错误时,我发现moment是node js函数,它不能在mongo shell上运行。@AnthonyWinzlet:是的,我指的是ISO8601中的字符串<代码>日期:“1998-02-08”。使用这种格式,您可以直接比较字符串。@AnthonyWinzlet谢谢您的回答+1并接受了答案。
db.panelists.aggregate([
  { "$addFields": {
    "date": {
      "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }
    } 
  }},
  { "$match": {
    "date": {
      "$gte": moment('08-02-1998').toDate(),
      "$lte": moment('08-02-2003').toDate()
    }
  }},
  { "$count": "count" }
])
db.collection.find({
  "$expr": {
    "$and": [
      {
        "$gte": [
          { "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
          ISODate("2000-02-22T00:00:00Z")
        ]
      },
      {
        "$lte": [
          { "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
          ISODate("2000-02-24T00:00:00Z")
        ]
      }
    ]
  }
})
db.collection.aggregate([
  { "$match": {
    "$expr": {
      "$and": [
        {
          "$gte": [
            { "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
            ISODate("2000-02-22T00:00:00Z")
          ]
        },
        {
          "$lte": [
            { "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
            ISODate("2000-02-24T00:00:00Z")
          ]
        }
      ]
    }
  }}
])