MongoEngine удалить строку из ListField

код:

class Users(db.Document, UserMixin):
    first_name = db.StringField()
    last_name = db.StringField()
    username = db.StringField(unique=True)
    password = db.StringField()
    email = db.StringField()
    following = db.ListField(db.StringField(), default=[])
    role = db.ListField(db.StringField(), default=["user"])
    confirmed = db.BooleanField(default=False)
    confirmed_on = db.DateTimeField()

поэтому, если бы я хотел удалить определенную строку из поля Users.following

Users.objects(username="some_user").update(pull__following=["some_string"]) а потом сохранить?

потому что я пробовал это, и это не удалит строку из following listField


person Zion    schedule 21.12.2015    source источник


Ответы (1)


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

Users.objects(username='some_user').update(pull__following='some_string')

Вы также можете удалить несколько элементов из списка «подписчиков», используя модификатор pull_all; и в этом случае вы передаете список значений.

Users.objects(username='some_user').update(pull_all__following=['one_string', 'another_string'])
person styvane    schedule 22.12.2015
comment
так вот почему. pull будет принимать только одно значение, а pull_all принимает list или tuple - person Zion; 22.12.2015