mongodb 中的唯一索引使用 db.command
Unique index in mongodb using db.command
我正在使用 mongodb
和 PyMongo
,我想将模式定义与应用程序的其余部分分开。我的文件 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
)在user
collection的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 迭代数组和 运行 每个命令。
我正在使用 mongodb
和 PyMongo
,我想将模式定义与应用程序的其余部分分开。我的文件 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
)在user
collection的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 迭代数组和 运行 每个命令。