MongoDB - 如何将ObjectId和datetime显示为字符串(使用bson.json_util)

时间:2015-04-19 00:08:58

标签: python mongodb pymongo

所以我不确定如何使用bson.json_util类将ObjectId和datetime转换为字符串。

我知道你可以使用来自pymongo游标的dumps然后loads,但问题出在我加载之后,我仍然有" _id"作为ObjectId和datetime作为日期时间对象。

我的代码:

all_cats = db.cats.find()
foo = dumps(all_cats)
print loads(foo)


[{
   u'c': u'this is a comment', 
   u'd': datetime.datetime(2015, 4, 19, 7, 16, tzinfo=<bson.tz_util.FixedOffset object at 0x10cece7d0>), 
   u'_id': ObjectId('55329b7de73f02d1069528f5')
}]

那么如何将_id转换为&#34; _id&#34;:&#34; 55329b7de73f02d1069528f5&#34;和日期到&#34; d&#34;:&#34; 2015-04-19 07:16:00&#34; ??

非常感谢!

修改

当所有元素都转换为字符串后,我将使用Flask的jsonify返回 - 这不会抱怨&#34; _id&#34;是一个ObjectId和&#34; d&#34;是一个日期时间对象

return jsonify(loads(foo))

1 个答案:

答案 0 :(得分:1)

这些贵重物品是Pymongo的标准。

您可以使用以下方法在Python中进行转换:

_ID使用str(object)因为是bson.objectid.ObjectId(它是一个函数而不是方法)

D使用D.strftime(&#34;%Y-%m-%d%H:%M:%S&#34;)因为是日期时间,您可以根据需要更改格式。

示例:

from pymongo import MongoClient
# making a Connection with MongoClient
client = MongoClient()
#client = MongoClient('localhost', 27017)
# getting a Database
db = client.local
# getting a Collection
test = db['foo2']
#print test
item = test.find_one()
print 'Hello %s!' % item
#example Date
d = item['birth']
dString = d.strftime("%Y-%m-%d %H:%M:%S")
print 'D: %s' % d
print 'Type D: %s' % type(d)
print 'DString: %s' % dString
print 'Type DString: %s' % type(dString)
#example _ID
id = item['_id']
idString = str(id)
print 'ID: %s' % id
print 'Type ID: %s' % type(id)
print 'IDString: %s' % idString
print 'Type IDString: %s' % type(idString)