与MongoDB不同,用于Mongo的CosmosDB API对多键唯一索引的处理方式不同

时间:2019-01-31 19:38:15

标签: azure-cosmosdb azure-cosmosdb-mongoapi

我试图将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是唯一的,而不是既studyidstudypath

这是CosmosDB的MongoDB API的已知限制吗?还是有什么我可以做的,而无需更改代码,就能给我预期的结果吗?

仅供参考,我已经为CosmosDB打开了以下两个预览功能:

  • 启用“聚合管道”
  • 启用“ MongoDB 3.4有线协议(版本5)”

0 个答案:

没有答案