我正试图将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)”