gpt4 book ai didi

mongodb - 将 ISODate 字符串转换为 mongoDB native ISODate 数据类型

转载 作者:可可西里 更新时间:2023-11-01 10:04:51 24 4
gpt4 key购买 nike

我的应用程序生成 JSON 格式的日志。日志看起来像这样:

{"LogLevel":"error","Datetime":"2013-06-21T11:20:17Z","Module":"DB","Method":"ExecuteSelect","Request":"WS_VALIDATE","Error":"Procedure or function 'WS_VALIDATE' expects parameter '@LOGIN_ID', which was not supplied."}

目前,我正在将上述日志行推送到 mongoDB 中。但是 mongoDB 将 Datetime 存储为字符串(这是预期的)。现在我想在这些日志上运行一些数据处理作业,我更愿意将 Datetime 存储为 mongoDB 的 native ISODate 数据类型。

我可以想到 3 种方法:

i) 在应用程序代码中解析每个 JSON 日志行并将字符串转换为 ISODate 类型,然后将其插入。缺点:在将其推送到 mongoDB 之前,我必须解析每一行,这会有点昂贵

ii) 在每次插入后运行一个查询,使用

将最后插入文档的字符串日期时间转换为 ISODate
element.Datetime = ISODate(element.Datetime);

缺点:同样昂贵,因为我要在每次插入时运行一个额外的查询iii) 在生成点修改我的日志,这样我就不必在应用程序代码级别进行任何解析,或者在每次插入后运行更新查询

此外,我很好奇,有没有一种方法可以配置 mongoDB 以自动将日期时间字符串转换为其 native isodate 格式?

TIA

编辑:我正在使用 pymongo 插入 json 日志

我的文件看起来像这样:

{"LogLevel":"error","Datetime":"2013-06-21T11:20:17Z","Module":"DB","Method":"ExecuteSelect","Request":"WS_VALIDATE ","Error":"过程或函数 'WS_VALIDATE' 需要参数 '@LOGIN_ID',但未提供。"

像上面说的那一行有几百行。这就是我将它们插入 mongodb 的方式:

for line in logfile:
collection.insert(json.loads(line))

以下将解决我的问题:

for line in logfile:
data = json.loads(line)
data["Datetime"] = datetime.strptime(data["Datetime"], "%Y-%M-%DTHH:mmZ")
collection.insert(data)

我想要做的是摆脱我必须在上面做的对日期时间的额外操作。希望这能澄清问题。

最佳答案

看起来你已经有了答案......我会坚持:

for line in logfile:
data = json.loads(line)
data["Datetime"] = datetime.strptime(data["Datetime"], "%Y-%M-%DTHH:mmZ")
collection.insert(data)

我有一个类似的问题,但我事先不知道应该在哪里用日期时间对象替换它。所以我将我的 json 信息更改为:

{"LogLevel":"error","Datetime":{"__timestamp__": "2013-06-21T11:20:17Z"},"Module":"DB","Method":"ExecuteSelect","Request":"WS_VALIDATE","Error":"Procedure or function 'WS_VALIDATE' expects parameter '@LOGIN_ID', which was not supplied."}

并解析 json:

json.loads(data, object_hook=logHook)

'logHook' 定义为:

def logHook(d):
if '__timestamp__' in d:
return datetime.strptime(d['__timestamp__'], "%Y-%M-%DTHH:mmZ")
return d

这个 logHook 函数也可以扩展为用 elif, elif, ... 替换许多其他“变量”

希望这对您有所帮助!

关于mongodb - 将 ISODate 字符串转换为 mongoDB native ISODate 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17236479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com