2012-02-11 88 views
1

我正在開發一個Flask和MongoEngine的博客引擎,我需要我的帖子的順序ID。MongoEngine的自動增量

我需要MongoEngine爲每個新崗位創建一個新的ID,所以我想這樣做是這樣的:

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

將這項工作?有一個更好的方法嗎?

回答

9

,你需要了解爲什麼你需要增量ID?他們解決什麼問題?

即使世界在MongoDB中沒有本地的解決方案 - 請閱讀:http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

正如你已經與郵政的pk一個唯一的標識符,爲什麼不利用呢?最後,如果我沒有勸阻你從愚蠢的話,那麼在mongoengine中有一個SequenceField,它會爲你處理遞增。 https://mongoengine-odm.readthedocs.org/en/latest/apireference.html#mongoengine.fields.SequenceField

+1

我希望文章的增量ID以及用戶自動生成的ID不適合在URL中使用,這就是我爲什麼要創建自己的ID的原因。 – 2012-02-14 08:27:06

+0

當然,但你可以使人類可讀的slu - - 這也將改善網址的可訪問性。 – Ross 2012-02-14 10:52:29

+0

謝謝,我會考慮的。 – 2012-02-14 11:18:24

2

我想通了。

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() 
+3

馬哈茂德 - 這不是正確的解決方案,它包含競爭條件,因此很容易失敗。 – Ross 2012-02-13 11:01:30