在mongoengine中模拟deque结构

时间:2012-09-06 16:28:16

标签: mongodb mongoengine

所以我有一个“部分”,每个部分都有一些“小块”。我的模型是这样的:

class Nugget(EmbeddedDocument):
    title = StringField(required=True)
    img = StringField(required=True)
    content = StringField(required=True)
    section = StringField(required=True)
    next_nugget = StringField(required=True)
    previous_nugget = StringField(required=True)

class Section(Document):
    meta = {"collection":"Sections"}
    title = StringField(required=True)
    nuggets = ListField(EmbeddedDocumentField(Nugget), default=list)

我的问题是如何确保以特定顺序存储和检索掘金(让我们说插入顺序)?最有效的方法是模拟deque结构吗?那我怎么能用mongoengine做到这一点?如果可以,我可以使用mongoengine的SortedListField来产生同样的效果吗?

1 个答案:

答案 0 :(得分:1)

最好的方法是在您的应用程序中管理它 - 始终push到列表中。否则,您必须确保按照您希望的顺序保存(覆盖)列表 - 缺点是您必须注意不要在代码中引入竞争条件。出于这个原因,我主张使用推送操作 - 请参阅:http://docs.mongoengine.org/en/latest/guide/querying.html?highlight=push#atomic-updates