【问题标题】:Limit length of ListField in mongoenginemongoengine中ListField的限制长度
【发布时间】:2015-03-11 07:10:16
【问题描述】:

我可以在没有if 条件的情况下限制 mongoengie 中 ListField 数据的长度吗?

我需要这样的东西:

list = db.ListField(IntField(), max_length = 24)

在我的document.

或者我必须在我的列表要更新时检查它的长度,如果我的列表长度大于 24,则不要更新它!

【问题讨论】:

    标签: python mongodb limit mongoengine listfield


    【解决方案1】:

    ListField 中没有内置这样的功能,但您可以让您的自定义ListField 提供max_length 属性:

    class MyListField(ListField):
        def __init__(self, max_length=None,  **kwargs):
            self.max_length = max_length
            super(MyListField, self).__init__(**kwargs)
    
        def validate(self, value):
            super(MyListField, self).validate(value)
    
            if self.max_length is not None and len(value) > self.max_length:
                self.error('Too many items in the list')
    

    【讨论】:

    • 只是在我的头顶上,现在没有看,但不能将SortedListField 应用于按照正常的 MongoDB 数组操作有效地执行 $slice 的参数?我似乎隐约记得有一个测试用例这样做。但如果你能确认这不是真的,那就太好了。
    • 哇,我不考虑自定义 Listfield,它看起来很棒,但我无法理解一些语法,如 **kwargssupervalidate 函数你能告诉我它们吗?跨度>
    • @MDK 当然,super(MyListField, self).__init__(**kwargs) 会调用ListField__init__() 方法(请参阅stackoverflow.com/questions/576169/…),谈到**kwargs - 请参阅stackoverflow.com/questions/1769403/…Field.validate() 方法是 mongoengine 字段的基本验证方法,请参阅例如如何实现 StringField。希望对您有所帮助。
    • @NeilLunn 从查看sources 我不认为切片是以特殊方式处理的,但我可能错了,我的 mongodb 和 mongoengine 技能目前非常生疏:)
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多