首页 > 解决方案 > 如何在 MongoDB 中将字符串转换为日期

问题描述

我正在使用 pymongo 查找今天和昨天的所有条目。我已经按照 pymongo 教程进行操作,但我无法完成这项工作。

例如,我有一个这样的示例文档

{
   "_id":"1586856578",
   "threads": "hello"
}

现在我尝试使用以下代码获取昨天的文档。

result = collection.find({"_id": {"$lt": yesterday}}) #<= Not working

所以我看到某个地方 mongodb 支持字符串迄今为止使用toDate所以我也试过这个。

from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)

dateConversionStage = {"$addFields": {"convertedDate": {"$toDate": "$_id"}}}

result = collection.find({"dateConversionStage": {"$lt": yesterday}})

但仍然返回空。帮我打印所有不超过昨天的文件。

更新

convertedLong = {"$addFields": {"convertedLong": {"$toDecimal": "$_id"}}}
convertedDate = {"$addFields": {"convertedDate": {"$toDate": "convertedLong"}}}

result = collection.aggregate([convertedLong, convertedDate])
for each in result:
    print(each)

标签: mongodbpymongo

解决方案


使用 PyMongo 和三个输入文档:

{ "_id" : "1586908800000" }    // ISODate("2020-04-15T00:00:00Z")
{ "_id" : "1586736000000" }    // ISODate("2020-04-13T00:00:00Z")
{ "_id" : "1585094400000" }    // ISODate("2020-03-25T00:00:00Z")

查询查找昨天(今天是15-April-2020)之前的文档:

import pymongo
import datetime

client = pymongo.MongoClient()
collection = client.test.myCollection
yesterday = datetime.datetime(2020, 4, 14)
result = collection.find( { "$expr": { "$lt": [ { "$toDate": { "$toLong": "$_id" } }, yesterday ] } } )

for doc in result:
    print(doc)

输出有两个文档。


推荐阅读