【问题标题】:In Cosmos DB, how to detect and react to document size before I create it在 Cosmos DB 中,如何在创建文档之前检测文档大小并做出反应
【发布时间】:2026-02-07 01:00:02
【问题描述】:

我正在尝试管理我的文档,大小限制在 2mb 左右。 在尝试创建文档之前,获取文档大小的最有效、准确且资源占用最少的方法是什么?

【问题讨论】:

    标签: json azure azure-cosmosdb


    【解决方案1】:

    您可以序列化您将要添加到 CosmosDB 中的对象,然后获取字符串的长度(以字节为单位)。

    请记住,这不会 100% 准确,因为 cosmos 会添加它自己的所有元数据属性,例如 etag 等,但它已经足够接近了。

    值得一提的是,我个人不推荐这种方法,但如果你想在添加之前获得尺寸,它可能是你能得到的最接近的方法。

    【讨论】:

      【解决方案2】:

      我认为在创建之前是不可能的,无论如何,查看当您查询文档时返回的标题 x-ms-resource-usage,其中将包含一个 documentsSize属性

      client.readDocument(doc, function (err, doc, headers) {
        ...
      })
      

      【讨论】:

      • 我找到了这个,但我不确定它是否正常工作: var json = JsonConvert.SerializeObject(series); var sizeMethod1 = json.Length * sizeof(Char); var sizeMethod2 = System.Text.UTF8Encoding.Unicode.GetBytes(json).Length; log.Info($"文档大小方法一:{sizeMethod1}和大小方法二:{sizeMethod2}");
      • 这是一个丑陋的评论。希望它有一些意义。
      • 不,这将返回不同的值,您应该实际存储和查询它。
      • @Sajeetharan 听起来他甚至想在添加之前知道它的大小。
      • @NickChapsas 这也是我在评论中提到的