我试图将Azure CosmosDB放到最初使用MongoDB的项目中。我遇到了一个问题,在CosmosDB和MongoDB中,对唯一索引的处理方式有所不同,并且找不到任何建议我应该看到此问题的文档。
要说明这一点,我使用了mongo
CLI连接到我CosmosDB和我的MongoDB(3.6版本),并且运行下面的命令来创建一个集合,定义了一些独特的多键索引,然后插入一些文件:
# combination of id + study should be unique
db.repro_issue.ensureIndex({"id":1,"study":1},{unique:true})
# combination of path + study should be unique
db.repro_issue.ensureIndex({"path":1,"study":1},{unique:true})
# EXPECTED: PASS (first document, so everything in unique)
db.repro_issue.insert({"id":"my_id_1", "path":"path_1", study:1})
# EXPECTED: PASS (id + study unique, path + study unique)
db.repro_issue.insert({"id":"my_id_2", "path":"path_2", study:1})
# EXPECTED: FAIL (id + study unique, path + study NOT unique)
db.repro_issue.insert({"id":"my_id_3", "path":"path_2", study:1})
# EXPECTED: 2 documents returned
db.repro_issue.find()
以上对MongoDB 3.6正常工作。插入第二个文档时,它会针对CosmosDB实例生成错误,因为...
globaldb:PRIMARY> db.repro_issue.insert({"id":"my_id_2", "path":"path_2", study:1})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: opencga_catalog.repro_issue Failed _id or unique key constraint"
}
})
这似乎是检查study
是唯一的,而不是既study
与id
或study
与path
。
这是CosmosDB的MongoDB API的已知限制吗?还是有什么我可以做的,而无需更改代码,就能给我预期的结果吗?
仅供参考,我已经为CosmosDB打开了以下两个预览功能: