Azure cosmosdb documentDb中没有分区键属性的文档会发生什么情况?

Azure cosmosdb documentDb中没有分区键属性的文档会发生什么情况?,azure-cosmosdb,Azure Cosmosdb,看看如何使用分区键设置DocumentDb,如果我有一个多租户应用程序,其中大多数文档都有一个tenantId,那么创建分区键为/tenantId/的集合似乎是合理的 没有租户属性的文档会发生什么情况?它们是否只是在没有添加的情况下添加,或者Cosmos DB是否会使用某种系统(硬编码)tenantId创建这些对象/文档,以便将它们存储在一起?这些文档会自动为分区键分配“未定义”值(类似于JavaScript的未定义)。这与任何其他值一样,所有缺少键的文档都存储在同一分区中。如果您有大量这样的数

看看如何使用分区键设置DocumentDb,如果我有一个多租户应用程序,其中大多数文档都有一个tenantId,那么创建分区键为/tenantId/的集合似乎是合理的


没有租户属性的文档会发生什么情况?它们是否只是在没有添加的情况下添加,或者Cosmos DB是否会使用某种系统(硬编码)tenantId创建这些对象/文档,以便将它们存储在一起?

这些文档会自动为分区键分配“未定义”值(类似于JavaScript的未定义)。这与任何其他值一样,所有缺少键的文档都存储在同一分区中。如果您有大量这样的数据,那么您将很难扩展,因为丢失的密钥中的所有写入都将被分配到同一分区


通常,最好避免这种情况,或者稍后通过删除/重新插入来修复这种情况(如果缺少分区键是由于在创建时不知道分区键的某种异步性质造成的)。

我将继续上面的内容,我们假设分区键只是未定义的,但是,当尝试删除一个没有与分区键相关属性的文档时,我得到错误“必须为此操作提供分区键值”?如何删除这些?似乎需要添加和删除传入未定义分区键的文档:requestOptions=newrequestoptions{PartitionKey=newpartitionkey(undefined.Value)};是的,没错。您应该为分区键使用未定义的.Value。如果缺少分区键,则省略分区键或为分区键使用伪值(例如guid.empty)是否有区别?但我想如果缺少分区键(perf和RU),编写总是包含分区键的查询就更难了:-)