Как добавить элемент в список в Mongoengine - PullRequest
1 голос
/ 30 ноября 2011

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

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

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

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

BlogPost.objects(tags__0='nosql')

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

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

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

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

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

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 голосов
/ 28 июня 2015

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

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

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

...