Как удалить элемент из списка (ListField) по идентификатору в MongoEngine?

структура:

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

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


person Jerry    schedule 21.10.2011    source источник


Ответы (3)


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

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

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

person Ross    schedule 21.10.2011

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

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

db.collection.update({'title':'test'},{$pull : { 'comments' : { 'id' : 8 }});
person DhruvPathak    schedule 21.10.2011

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

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

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

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

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

person Johnny Gasyna    schedule 18.10.2016