如何为Mongo API禁用Cosmos DB分片密钥

bao*_*uss 6 sharding azure-cosmosdb azure-cosmosdb-mongoapi

我正在将一个非常简单的mongo数据库(夫妇100个条目)迁移到Azure Cosmos DB。我的应用程序基于node-js,所以我使用猫鼬作为映射器。在非常简单之前,先定义架构,查询集合并完成。

现在,当在cosmos db中设置集合时,有人问我分区键和分片键的问题。我可以忽略的第一个,但最后一个是必需的。快速阅读有关该主题的内容并了解它是一种分区(再次,我不需要也不想),我只是选择_id作为分片键。

当然有些东西行不通。

虽然查找查询工作正常。更新或插入记录失败,以下是错误:

MongoError:命令中的查询必须针对单个分片键

Cosmos db(使用mongo API)被广告宣传为我的替代产品。显然不是这种情况,因为我从来不需要担心mongo中的这类事情,尤其是对于这么小的app / db。

因此,我可以以某种方式禁用分片吗?另外,我如何定义分片键,而不用担心它呢?

干杯

Jay*_*ong 0

1.我可以以某种方式禁用分片吗?

根据Mongo官方文档的说法,无法实现。

MongoDB 没有提供在调用 shardCollection 后停用集合分片的方法。此外,在 shardCollection 之后,您无法更改分片键或修改分片键索引中使用的任何字段的值。

因此,您无法停用或禁用分片键。

2.或者,我如何定义分片键并且完全不用担心它?

根据此链接,当您对集合使用插入/更新操作时,您可以在模式中设置分片键选项。

new Schema({ .. }, { shardKey: { tag: 1, name: 1 }})
Run Code Online (Sandbox Code Playgroud)

请注意,Mongoose 不会shardcollection为您发送命令。您必须自己配置您的分片。

顺便说一句,设置_id为片键可能不是一个合适的决定。您可以从这里找到一些关于选择分片键的建议。如果您想更改分片键或只是删除分片键,请参考此案例:如何更改分片键