2

我正在使用 Flask 和 MongoEngine 开发博客引擎,并且我的帖子需要顺序 ID。

我需要 MongoEngine 为每个新帖子创建一个新 ID,所以我正在考虑做这样的事情:

class Post(Document):
  title = StringField(required=True)
  content = StringField(required=True)
  published_at = datetime.utcnow()
  id = Post.objects.count() + 1

这行得通吗?有一个更好的方法吗?

4

3 回答 3

14

首先,您需要了解为什么需要增量 ID?他们解决什么问题?

mongoDB 中没有本地解决方案 - 请阅读:http ://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

由于您已经有了pkPost 的唯一标识符,为什么不使用它呢?

最后,如果我没有劝阻你不要做傻事,有一个SequenceFieldin mongoengine 可以为你处理增量。https://mongoengine-odm.readthedocs.org/en/latest/apireference.html#mongoengine.fields.SequenceField

于 2012-02-13T11:00:25.237 回答
3

编辑:这是一个不正确的解决方案,因为其他人指出这种方法会导致竞争条件。我只是把它留在这里,所以其他人会知道为什么这很糟糕。(多个客户端可以访问同一个对象并增加它,导致结果不一致)。


旧答案

我想到了。

该类Post如下所示:

class Post(Document):
      title = StringField(required=True)
      content = StringField(required=True)
      published_at = datetime.utcnow()
      ID = IntField(min_value=1)

在插入帖子的函数中,我计算可用记录,然后将它们增加 1,如下所示:

def create_post(title, content):
      Post(title=title, content=content, ID=Post.objects.count() + 1).save()
于 2012-02-11T08:03:40.283 回答
0

您可以使用mongoengine.signalsandpost_init来自动增加字段。顺便说一句,还没有测试过。

于 2022-01-31T12:10:34.967 回答