Эмулировать структуру deque в 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? Если это возможно, могу ли я использовать SortedListField mongoengine, чтобы получить тот же эффект?


person George Eracleous    schedule 06.09.2012    source источник


Ответы (1)


Лучший способ - управлять этим в своем приложении - всегда push в списке. В противном случае вы должны убедиться, что вы сохраняете (перезаписываете) список в том порядке, в котором вы хотите, чтобы он был, - недостатки этого заключаются в том, что вы должны быть осторожны, чтобы не ввести состояние гонки в свой код. По этой причине я бы рекомендовал просто использовать операцию push - см.: http://docs.mongoengine.org/en/latest/guide/querying.html?highlight=push#atomic-updates

person Ross    schedule 06.09.2012