3

我正在尝试将 Azure CosmosDB 放入最初使用 MongoDB 的项目中。我遇到了一个问题,即唯一索引在 CosmosDB 和 MongoDB 中的处理方式不同,我找不到任何建议我应该看到问题的文档。

为了说明这一点,我使用mongocli 连接到我的 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是唯一的,而不是两者的组合studywithidstudywith path

这是 CosmosDB 的 MongoDB API 的已知限制吗?或者有什么我可以做的,没有代码更改,会给我预期的结果?

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

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

0 回答 0