C# 预测MongoDb中字符串的索引键长度
我有一份表格的文件C# 预测MongoDb中字符串的索引键长度,c#,mongodb,mongodb-.net-driver,bson,C#,Mongodb,Mongodb .net Driver,Bson,我有一份表格的文件 { itemId: SomeInteger .... A bunch of other stuff IndexedArrayOfStrings: [string1, string2, etc] } IndexedArrayOfStrings上有一个索引。我有一些字符串太长了,以至于它们打破了索引中一个项目1024字节的最大大小。通常,我会通过将项转换为BSON来测试这一点,并测试字符串的长度。但是,当我尝试将字符串转换为BSON时,出现以下错误: b
{
itemId: SomeInteger
.... A bunch of other stuff
IndexedArrayOfStrings: [string1, string2, etc]
}
IndexedArrayOfStrings上有一个索引。我有一些字符串太长了,以至于它们打破了索引中一个项目1024字节的最大大小。通常,我会通过将项转换为BSON来测试这一点,并测试字符串的长度。但是,当我尝试将字符串转换为BSON时,出现以下错误:
byte[] payload = doc.IndexedArrayOfStrings[0].ToBson();
System.InvalidOperationException : A String value cannot be written to the root level of a BSON document.
我对大小的最佳估计是使用以下代码获取bson:
byte[] payload = new {IndexedArrayOfStrings = doc.IndexedArrayOfStrings}.ToBson();
这给了我比一个字符串更多的信息。长度为1012的重复“A”字符串具有长度为1051的bson,有效负载的长度将根据属性的名称而变化。无论属性的名称如何,索引失败点的字符串最大长度都是相同的。在这个简单的字符串中,可以索引的最大字符串是1012,但是UTF-16字符串的二进制长度与它的人类可读长度并不精确成正比
在将索引值发送到Mongo之前,是否有更好的方法预测索引值的长度?BSON文档的前缀是一个长度字段,以帮助扫描。因此,由于长度前缀和显式数组索引,BSON将比JSON使用更多的空间。
例如:
诸如{“hello”:“world”}之类的文档将存储为:
Bson:
\x16\x00\x00\x00
-------------------------->//文档总大小
\x02
------------------------------------------------>//0x02=类型字符串
hello\x00
--------------------------------------------->//字段名
\x06\x00\x00\x00world\x00
----------->//字段值(值大小、值、空终止符)
\x00
------------------------------------------------>//0x00=类型EOO('对象的结尾')
规范URL