mongodb 中的唯一索引使用 db.command

Unique index in mongodb using db.command

我正在使用 mongodbPyMongo,我想将模式定义与应用程序的其余部分分开。我的文件 user_schema.json 的架构为 user collection:

{
  "collMod": "user",
  "validator": {
    "$jsonSchema": {
      "bsonType": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "bsonType": "string"
        }
      }
    }
  }
}

然后在 db.py:

with open("user_schema.json", "r") as coll:
    data = OrderedDict(json.loads(coll.read())) # Read JSON schema.
    name = data["collMod"] # Get name of collection.
    db.create_collection(name) # Create collection.
    db.command(data) # Add validation to the collection.

有没有什么办法可以在不改变db.py的情况下(只改变user_schema.json)在usercollection的name字段中添加唯一索引?我知道我可以使用这个:

db.user.create_index("name", unique=True)

然而,我在两个地方有关于 collection 的信息。我想在 user_schema.json 文件中包含 collection 的所有配置。我需要这样的东西:

{
  "collMod": "user",
  "validator": {
    "$jsonSchema": {
       ...
    }
  },
  "index": {
    "name": {
      "unique": true
    }
  }
}

不,如果不更改 db.py,您将无法做到这一点。

user_schema.json 的内容是一个对象,可以传递给 db.command 到 运行 collmod 命令。

为了创建索引,您需要 运行 createIndexes 命令,或调用此命令的助手之一。

不可能用一个命令完成这两个操作。

一个简单的修改是将命令数组存储到 运行 中 user_schema.json,并让 db.py 迭代数组和 运行 每个命令。