应该将文本文件中的"Date"格式作为Json读取,然后使用Python插入到MongoDB中?

Ida*_*a N 3 python json mongodb bson

我需要在我的代码中执行以下操作:

  • 从文本文件中读取数据
  • 将数据转换为Json
  • 将数据插入MongoDB

以下是文本文件内容的外观示例:

{
   "S": "someString" <- Type String when inerted in mongodb
   "N": 123          <- Type Int32
   "F": 12.3         <- Type Double
   "D": ?            <- Need to be Type DateTime when inerted in mongodb
}
Run Code Online (Sandbox Code Playgroud)

我不知道我应该代替"?" 所以当我在python中使用bson.json_util.loads函数时,它可以正确地将文本文件转换为Json,以后可以将其插入到mongoDB中.

以下是执行加载和插入的代码:

with open('data.txt') as f:
    data = json_util.loads(f.read())
    db[dbName][colName].update({'_id': id}, data, upsert=True,safe=True)
Run Code Online (Sandbox Code Playgroud)

如果有人能举例说明如何格式化文件,我将不胜感激.(如果你的例子可以包含更复杂的Bson类型,比如类型"二进制"或"代码"那样也会很好:))

geo*_*org 9

Mongo对日期时间的表示是{"$date": number-of-milliseconds-since-epoch}.在你的例子中:

{
   "S": "someString",
   "N": 123,
   "F": 12.3,
   "D": {"$date": 1352540684243}
}
Run Code Online (Sandbox Code Playgroud)

D 写入mongo时会生成一个datetime字段.

请参阅mongo json扩展的文档.

您还可以轻松扩展json_util以编写自己的扩展,例如,对于ISO格式的日期时间:

import json, dateutil.parser, bson.json_util

a = """{
    "mydate": {"$isodate": "2012-11-01T20:19:55.782Z"}
}"""

def my_hook(dct):
    if '$isodate' in dct:
        return dateutil.parser.parse(dct['$isodate'])
    return bson.json_util.object_hook(dct)

obj = json.loads(a, object_hook=my_hook)
Run Code Online (Sandbox Code Playgroud)