Автоинкремент с MongoEngine - PullRequest
2 голосов
/ 11 февраля 2012

Я разрабатываю движок блогов с Flask и MongoEngine, и мне нужны последовательные идентификаторы для моих сообщений.

Мне нужно MongoEngine для создания нового идентификатора для каждого нового сообщения, поэтому я подумывал сделать что-то вроде этого:

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

Будет ли это работать? Есть ли лучший способ сделать это?

Ответы [ 2 ]

11 голосов
/ 13 февраля 2012

Во-первых, вам нужно понять, почему вам нужны инкрементные идентификаторы?Что они решают?

В mongoDB нет собственного решения - пожалуйста, прочитайте: http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

Поскольку у вас уже есть уникальный идентификатор с pk Поста, почему бы не использовать это??

Наконец, если я не отговорил вас от глупости, в mongoengine есть SequenceField, который обрабатывает увеличение для вас.https://mongoengine -odm.readthedocs.org / ен / последний / apireference.html # mongoengine.fields.SequenceField

2 голосов
/ 11 февраля 2012

Я понял это.

Класс 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()
...