Как удалить элемент из списка (ListField) по id в MongoEngine? - PullRequest
7 голосов
/ 21 октября 2011

структура :

{title: 'test', comments: [{id:1, title: ''}, {id: 8, title: ''}]}

Мне нужно удалить элемент id = 8, спасибо.

Ответы [ 3 ]

4 голосов
/ 21 октября 2011

Привет, вы можете извлекать элементы из массива:

https://github.com/hmarr/mongoengine/blob/master/tests/queryset.py#L1374

См. $ Pull: http://www.mongodb.org/display/DOCS/Updating#Updating-%24pull

1 голос
/ 21 октября 2011

Вы должны использовать оператор $ pull здесь:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24pull

db.collection.update({'title':'test'},{$pull : { 'comments' : { 'id' : 8 }});
0 голосов
/ 18 октября 2016

Вот один пример оператора pull, использующего flask_mongoengine и предполагающий, что класс родительского объекта называется Blog, а комментарии - это EmbeddedDocuments в Blog.

Blog.objects(id=blog_id).update_one(pull__comments___id=comment_id)

Обратите внимание на тройное подчеркивание в id комментариев.Это потому, что если вы хотите использовать первичные ключи в комментариях, вам нужно добавить один из них в объявлении модели следующим образом:

class Comment(db.EmbeddedDocument):
    _id = db.ObjectIdField(primary_key=True, default=lambda: ObjectId())
    ...

Функция lamba сгенерирует ваши первичные ключи для вас.

...