2015-12-21 2 views
2

код: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"]) , а затем сохранить его?

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

ответ

2

Если вы хотите удалить один элемент из списка вы должны использовать 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']) 
+0

так вот почему. 'pull' будет принимать только одно значение, в то время как' pull_al'l принимает 'list' или' tuple' – Zion

Смежные вопросы