Use $gte and &lte mongo operator if date is in string format in mongodb

℡╲_俬逩灬. 提交于 2019-12-18 03:47:18

问题


I have dob field like {dob:"02-23-2000"} in database. Now I want to perform $gte and &lte on dob field that is in string format like below:

db.panelists.count({"dob":{ '$gte': '08-02-1998', '$lte': '08-02-2003' }});

I am getting count value as zero always.

Could anyone please help me out to resolve this query in same dob format.


回答1:


You can try below aggregation in mongodb 3.6

You can use $dateFromString aggregation to convert your dob from string to date and then easily $count the documents applying $match on it.

1) Using aggregation with $addFields

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" }
])

2) Using simple find query with $expr

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")
        ]
      }
    ]
  }
})

3) Using aggregation with $expr

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")
          ]
        }
      ]
    }
  }}
])


来源:https://stackoverflow.com/questions/51647245/use-gte-and-lte-mongo-operator-if-date-is-in-string-format-in-mongodb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!