【问题标题】:How to set a max length on collection index in mongodb如何在 mongodb 中设置集合索引的最大长度
【发布时间】:2022-02-09 17:19:17
【问题描述】:

使用Pymongo 在我的mongodb 数据库中设置/查询/插入。

可以表明一个值应该是mongodb中的唯一索引。

db.mycoll.create_index("sid", unique=True) # This is what I have so far

现在,我想确保索引具有最小和最大长度。 (3-20 个字符)。

我没有找到任何关于添加长度限制的信息,用 mongodb 可以吗?

我希望是这样的:

db.mycoll.create_index("sid", unique=True, max_len=20, min_len=3) # Is there a way to do this ? 

如果您需要更多上下文,我在 mongodb 中有一个集合,对于每个文档,我都需要一个 SID(字符串 ID)。我想对这个值设置一个技术大小限制,所以我可以确定在我的应用程序的每一端,任何不匹配这个大小的字符串都不是正确的 id。

非常感谢

【问题讨论】:

标签: python mongodb pymongo string-length


【解决方案1】:

您可以使用 MongoDB Schema Validation 指定字符串类型字段的最大和最小长度。例如,

db.createCollection("mycoll", {
    validator: {
         $jsonSchema: {
             bsonType: "object",
             required: [ "name", "city" ],
             properties: {
                 name: {
                     bsonType: "string",
                     minLength: 3,
                     maxLength: 20,
                     description: "must be a string (3 to 20 chars) and is required"
                 },
                 city: {
                     bsonType: "string"
                 }
             }
        }
    }
} )

createCollection 方法具有validator 选项,您可以在其中指定$jsonSchema 以匹配架构中的文档。此外,您可以为验证器指定validationAction(默认为“error”)和validationLevel(默认为“strict”)。

这意味着,如果您尝试以下插入操作,它将失败。不会插入文档,因为 name 字段只有 2 个字符的长度。

db.mycoll.insertOne({name: 'mo', city: 'los angeles' })

注意:

  • 您仍然需要在 name 字段上创建唯一索引,以确保它不允许重复值。
  • 架构验证应用于数据库服务器 - 就像唯一索引一样。

[编辑添加] PyMongo 版本:

client = pymongo.MongoClient()
db = client['test']
db.create_collection('pycoll', validator={
         '$jsonSchema': {
             'bsonType': 'object',
             'required': [ 'name' ],
             'properties': {
                 'name': {
                     'bsonType': 'string',
                     'minLength': 3,
                     'maxLength': 20,
                     'description': 'must be a string (3 to 20 chars) and is required'
                 }
             }
        }
    }
)

print('Collection created...')

【讨论】:

  • 非常感谢,这符合我想要的,是否可以在 pymongo (python) 中调用 createCollextion 方法?我没在那里找到它? 它说db["collection"] 创建集合...
  • 在 PyMongo 中有一个create_collection
  • 我已经包含在答案中 - PyMongo 代码示例使用 validatorcreate_collection
  • 非常感谢,我会试试这个!
猜你喜欢
  • 2010-12-07
  • 2013-08-11
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多