bla*_*neh 5 mongodb pymongo meteor
我正在使用pymongo来自不同系统的旧信息来播种数据库,我有很多这样的查询:
studentId = studentsRemote.insert({'price': price})
Run Code Online (Sandbox Code Playgroud)
在实际的python脚本中,它studentId打印为一个字符串,但在javascript Meteor应用程序中,我正在使用这些数据,它在任何地方都显示为ObjectId(...).
我想配置pymongo生成_id一个字符串而不打扰ObjectId
我使用Meteor规范创建的任何对象都将使用字符串格式,而不是ObjectId格式.我不希望在我的应用程序中混合使用id类型,因为它导致了我的互操作性问题.
我知道我可以从Meteor创建ObjectId但坦率地说我更喜欢使用字符串格式.它是Meteor默认的,它更简单,我找不到任何有理由在我的特定应用程序中使用ObjectId.
该valueOf()蒙戈功能或类似的东西可以解析_id和使用,一旦它在数据库中更新文件,但它会是不错的东西更直接.
小智 5
在.py文件中:
from bson.objectid import ObjectId
......
kvdict['_id'] = str(ObjectId())
......
mongoCollection.insert(kvdict)
Run Code Online (Sandbox Code Playgroud)
没关系!
结果变得相当简单。
该son_manipulator模块可用于将传入文档更改为不同的形式。大多数时候,这用于对自定义对象进行编码,但它也适用于此。
操纵器就位后,只需调用str()ObjectId 上的函数即可进行转换。
from pymongo.son_manipulator import SONManipulator
class ObjectIdManipulator(SONManipulator):
def transform_incoming(self, son, collection):
son[u'_id'] = str(son[u'_id'])
return son
db.add_son_manipulator(ObjectIdManipulator())
Run Code Online (Sandbox Code Playgroud)