Как добавить элемент в список в Mongoengine

1

Mongoengine может подталкивать элементы к спискам, добавляя их

BlogPost.objects(id=post.id).update_one(push__tags='nosql')

Я хочу добавить вместо добавления, есть ли способ?

Другой альтернативный вопрос к той же проблеме.
Я могу запросить в списке по такой позиции

BlogPost.objects(tags__0='nosql')

Есть ли способ указать последний элемент в списке, например -1 index в списках python?

BlogPost.objects(tags__-1='nosql')# ?.. I wish !

Ответы на любой из двух вопросов помогут решить мою проблему. Заранее спасибо.

Теги:
mongoengine

2 ответа

1
Лучший ответ

Ни одна из этих операций не возможна, но вы можете легко обходить ее, эмулируя доступ к последнему элементу массива с другим полем. Предположим, что ваша модель:

class BlogPost(Document):
    tags = ListField(StringField())
    # other things

Добавить поле last_tag:

class BlogPost(Document):
    tags = ListField(StringField())
    last_tag = StringField()
    # other things

Затем, при обновлении:

BlogPost.objects(id=post.id).update_one(push__tags='nosql', set__last_tag='nosql')

И при запросе:

BlogPost.objects(last_tag='nosql')

Вы хотите убедиться, что last_tag проиндексирован и, возможно, также tags если вы также часто запрашиваете это.

  • 0
    проблема с этим подходом заключается в том, что мне приходится дублировать последние элементы списка, так как элемент - это не простая строка, это огромный встроенный документ.
0

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

blog_post = BlogPost.objects.get(id=post.id)
blog_post.tags.insert(0,'nosql')
blog_post.save()

К сожалению, MongoEngine для Python еще не предоставил надлежащего способа использования оператора $ position для $ push.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню