如何在 mongodb 中设置集合索引的最大长度

How to set a max length on collection index in mongodb

在我的 mongodb 数据库中使用 Pymongo 到 set/query/insert。

可以在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。

非常感谢

您可以使用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(默认为“错误”)和 validationLevel(默认为“严格”)。

这意味着,如果您尝试以下插入操作,它将失败。将不会插入文档,因为 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...')