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