我需要在我的代码中执行以下操作:
以下是文本文件内容的外观示例:
{
"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
}
我不知道我应该代替“?”所以当我在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)
如果有人能举例说明如何格式化文件,我将不胜感激。 (如果您的示例可以包含更复杂的Bson类型,例如类型“二进制”或“代码”,那也很不错:))
答案 0 :(得分:9)
Mongo的日期时间表示为{"$date": number-of-milliseconds-since-epoch}
。在您的示例中:
{
"S": "someString",
"N": 123,
"F": 12.3,
"D": {"$date": 1352540684243}
}
D
会在写入mongo时生成日期时间字段。
请参阅the documentation for mongo json extensions。
您还可以轻松扩展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)
答案 1 :(得分:0)
JSON对日期一无所知,因此由您自行决定序列化和反序列化的标准格式。它将作为字符串存储在MongoDB中,因此在Python代码中调用strftime和strptime时,请确保使用相同的格式字符串。
答案 2 :(得分:0)
为什么不使用时间戳。它们非常易于使用,除了在您的实际程序代码中也不需要真正的特殊处理,或者可以很容易地将它们作为整数保留。我已经处理过格式字符串,确实没有一种很好的方法可以确保它们在任何地方都是相同的,因此我尽可能地使用时间戳。