API-интерфейс CosmosDB для Mongo по-разному относится к уникальным индексам нескольких ключей - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь добавить 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.

Является ли это известным ограничением API-интерфейса CosmosDB для MongoDB?Или есть что-то, что я могу сделать без изменения кода, который бы дал мне ожидаемый результат?

К вашему сведению Я включил следующие две функции предварительного просмотра для CosmosDB:

  • Включить«Агрегационный конвейер»
  • Включить «Проводной протокол MongoDB 3.4 (версия 5)»
...