如果日期是 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.
推荐答案
你可以在mongodb3.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屋!