Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 预测MongoDb中字符串的索引键长度_C#_Mongodb_Mongodb .net Driver_Bson - Fatal编程技术网

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