【问题标题】:MongoEngine remove string from ListFieldMongoEngine 从 ListField 中删除字符串
【发布时间】:2015-12-21 19:02:25
【问题描述】:

代码:

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 中删除字符串

【问题讨论】:

    标签: mongodb flask mongoengine flask-mongoengine


    【解决方案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'])
    

    【讨论】:

    • 所以这就是原因。 pull 将仅采用单个值,而 pull_all 采用 listtuple
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多