MongoDb查询,带“quot;2019-07-31T00:00:00“;日期格式

MongoDb查询,带“quot;2019-07-31T00:00:00“;日期格式,mongodb,mongodb-query,azure-cosmosdb-mongoapi,Mongodb,Mongodb Query,Azure Cosmosdb Mongoapi,我在MongoDB集合中有以下格式的日期字段: { "firstEffectiveDate" : "2019-09-31T00:00:00". "lastEffectiveDate" : "2019-11-30T00:00:00". } 现在我正在尝试获取当前活动的记录,这意味着如果当前日期介于firstEffectivedate和lastEffectivedate之间,它将返回所有记录 我第一次尝试获得比今天更棒的唱片: db.collection.find({first

我在MongoDB集合中有以下格式的日期字段:

{
     "firstEffectiveDate" : "2019-09-31T00:00:00".
     "lastEffectiveDate" : "2019-11-30T00:00:00".
}
现在我正在尝试获取当前活动的记录,这意味着如果当前日期介于firstEffectivedate和lastEffectivedate之间,它将返回所有记录

我第一次尝试获得比今天更棒的唱片:

db.collection.find({firstEffectiveDate: {"$gte": new Date()}})
但这本身并没有归还任何文件,请有人帮忙。多谢各位


如何在上述日期格式的日期之间获取记录?

由于日期记录为字符串,因此不能使用
新日期()
作为参数,因为这样会将字符串与日期进行比较

幸运的是,您使用的是ISO标准日期格式,这意味着它可以排序,甚至可以作为字符串

例如,假设我有以下收藏:

> db.test.find()
{ "_id": 0, "dt": "2019-08-20T00:00:00" }
{ "_id": 1, "dt": "2019-08-21T00:00:00" }
{ "_id": 2, "dt": "2019-08-22T00:00:00" }
{ "_id": 3, "dt": "2019-08-23T00:00:00" }
{ "_id": 4, "dt": "2019-08-24T00:00:00" }
{ "_id": 5, "dt": "2019-08-25T00:00:00" }
您可以使用字符串形式的ISO日期格式构造查询,如:

> db.test.find({dt:{$gte:'2019-08-23T00:00:00'}})
{ "_id": 3, "dt": "2019-08-23T00:00:00" }
{ "_id": 4, "dt": "2019-08-24T00:00:00" }
{ "_id": 5, "dt": "2019-08-25T00:00:00" }
请注意,查询正确选择了所有日期>=
2019-08-23T00:00:00

如果今天的日期是2019-08-22,这也将起作用:

> db.test.find({dt:{$gte:(new Date()).toISOString()}})
{ "_id": 3, "dt": "2019-08-23T00:00:00" }
{ "_id": 4, "dt": "2019-08-24T00:00:00" }
{ "_id": 5, "dt": "2019-08-25T00:00:00" }

实际上,最好的解决方案是重构数据,使用适当的
ISODate()
datatype而不是字符串。通过这种方式,您可以利用in aggregation提供的高级日期计算方法。

请发布一个带有相关字段的示例文档。如果我不得不猜测,我认为您的
firstEffectiveDate
字段包含字符串数据类型中的日期,而不是
ISODate()
datatype.Yes@kevinadi。是的,t是字符串类型,很抱歉回复太晚。存储方式与上面相同。谢谢Kevin,新日期().toISOString()为我工作。我正在使用Azure Data Factory加载数据,就像这样,无法理解如何将其更改为所需格式。嗨,Kevin,我有一个查询在CMD中工作,但在node JS中没有。碰巧你有什么想法吗?@ravi那是另一个问题。请发布一个新问题并链接到这里,也许我能帮上忙。