2013-04-10 55 views
0

我試圖做一個查詢來獲取已張貼到任何發表的最新評論,但不能得到它的權利。我基本上想要顯示網站上發佈的所有評論的活動列表。你怎麼能得到最新的EmbeddedDocument對象與MongoEngine

我使用燒瓶,MongoDB的與蒙戈引擎。

這裏是我的模型:

class Post(db.Document): 
    slug = db.StringField(max_length=255, required=True) 
    title = db.StringField(max_length=255, required=True) 
    body = db.StringField(max_length=255, required=True) 
    comments = db.ListField(db.EmbeddedDocumentField('Comment')) 

class Comment(db.EmbeddedDocument): 
    message = db.StringField(required=True) 
    author = db.ReferenceField(User, dbref=True) 
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True) 

任何想法,將不勝感激。 乾杯

回答

1

架構設計用於特定用例差。您應該將註釋存儲爲單獨的文檔,然後您可以按照需要的方式有效地查詢數據。

或者,您可以將最新的x個註釋去規範化並存儲在單獨的文檔/集合中。但你必須手動管理這個集合。

mongodb文檔對您有幫助圖片還有一個有關data modeling的好消息]

+0

可能是一個可憐的模式,但燒瓶Mongoengine在互聯網上的文檔和演示使用的東西非常相似。另外,你不回答這個問題。 – 2015-12-03 22:02:00

+0

我以爲我的第二句話回答了這個問題 - 基本上將評論存儲在他們自己的收藏中。這意味着你可以有效地查詢評論。 我甚至提供了另一個使用這種模式的想法,但增加了另一個最新的評論集合。爲問題提供兩種解決方案。 – Ross 2015-12-07 19:53:40

1

EmbeddedDocumentField意味着這個文件只是自己的文檔就像字典的一部分。因此,您可以通過所有評論獲取所有帖子,然後您可以獲取所有評論並對其進行分類。或者你可以讓comments作爲ReferenceFieldComment作爲Documetn列表。或者你可以編寫自己的mongo函數來完成它。

也許pymongo允許獲取列表的一部分,但我不知道怎麼辦。不過,據我所知,mongoengoe不允許它出現在框中。

相關問題