代码之家  ›  专栏  ›  技术社区  ›  Martin Peck

Mongo的CosmosDB API对待多键唯一索引的方式与MongoDB不同

  •  2
  • Martin Peck  · 技术社区  · 7 年前

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

    为了说明这一点,我使用了 mongo cli连接到my CosmosDB和my 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 是独一无二的,而不是两者的结合 学习 具有 id 学习 具有 path .

    这是CosmosDB针对MongoDB的API的已知限制吗?或者,在不更改代码的情况下,我能做些什么,从而得到预期的结果吗?

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

    • 启用“聚合管道”
    • 启用“MongoDB 3.4有线协议(版本5)”
    0 回复  |  直到 7 年前
    推荐文章