如果日期在 mongodb 中为字符串格式,则使用 $gte 和 &lte mongo 运算符 [英] Use $gte and &lte mongo operator if date is in string format in mongodb
问题描述
我在数据库中有像 {dob:"02-23-2000"}
这样的 dob 字段.现在我想在字符串格式的 dob 字段上执行 $gte
和 <e
,如下所示:
I have dob field like {dob:"02-23-2000"}
in database. Now I want to perform $gte
and <e
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.
谁能帮我解决这个问题,用同样的 dob 格式.
Could anyone please help me out to resolve this query in same dob format.
推荐答案
你可以在mongodb中尝试下面的聚合3.6
You can try below aggregation in mongodb 3.6
您可以使用 $dateFromString
聚合将您的 dob
从字符串到日期,然后轻松 $count
应用$的文件匹配
就可以了.
You can use $dateFromString
aggregation to convert your dob
from
string to date and then easily $count
the documents applying $match
on it.
1) 通过 使用聚合$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) 使用简单的查找查询 $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) 通过 使用聚合$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")
]
}
]
}
}}
])
这篇关于如果日期在 mongodb 中为字符串格式,则使用 $gte 和 &lte mongo 运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!