python - 在 Python 代码中使用 MongoDB 服务器函数作为 ID
问题描述
我有一些服务器使用 Python 将数据插入到我的 MongoDB,因为我想从旧的 --> 新的读取它我想通过增加 ID 中的数量来获得反馈。
我在我的 python 代码中使用 Mongoengine 来插入,但没有找到任何关于使用 MongoDB Javascript 函数的信息,例如 mongo 在这里提供自动增量序列函数:https://www.tutorialspoint.com/mongodb/mongodb_autoincrement_sequence。 htm
我尝试使用这样的类:
class LogTemplate(mongoengine.Document):
_id = mongoengine.IntField(required=True)
logid = mongoengine.IntField(required=True)
time = mongoengine.DateTimeField(required=True)
type = mongoengine.IntField(required=True)
然后在保存之前:
def pushToMongo(evtmgr) -> LogTemplate:
loghand = LogTemplate()
loghand._id = loghand.getNextSequenceValue('collection name')
loghand.logid = evtmgr.id
loghand.type = evtmgr.type
loghand.time = datetime.fromtimestamp(evtmgr.time.seconds)
但没有错误,之后没有任何内容插入数据库。我正在使用 Mongo 端增量,因为不止一个服务器使用它。
解决方案
不支持在 mongoengine 中运行 mongodb javascript 代码(除了已弃用且不适合您的用例的 exec_js 之外)。
话虽如此,mongoengine 提供了可以为您的案例解决问题的SequenceField 。它的工作原理相同,将计数器存储在单独的集合中
例如:
class Person(Document):
id = SequenceField(primary_key=True)
name = StringField()
Person(name='John').save() # saves {'_id': 1, 'name': 'John'}
Person(name='Bob').save() # saves {'_id': 2, 'name': 'Bob'}
推荐阅读
- jquery - 不同的 typeerror 和 Chrome 和 IE 11
- swift - 在视图中重新实例化 @EnvironmentObject
- laravel - 如何使用 Laravel 和 Vue js 搜索数据?
- javascript - 逻辑:使用传送门时防止无限循环
- javascript - 根据Flask中html中的if条件触发JQuery中的不同事件
- python - 随机产生获胜者
- react-native - ReferenceError:找不到变量:道具
- arrays - 过滤虚数
- java - ConcurrentModification EHCache 多线程 Java
- tableau-api - 如何通过在 Tableau 中单击并过滤来自另一个源的条形图来过滤一个源?