Arangodb 在截断的文档值中使用NULL

Arangodb 在截断的文档值中使用NULL,arangodb,Arangodb,在Arangodb2.5.2(可能更早)中,我们编写的代码依赖于文档中允许空字符的值 在ArangoDB 2.6.1+中,NULL似乎充当字符串终止符,即使可能有更多的字符串数据。我们如何恢复以前的行为 例如,如果该值为“value\u0000SubValue1\u0000SubValue2”,则较新版本会很遗憾地截断: 2.5.2 => "value\u0000SubValue1\u0000SubValue2" 2.6.2 => "value"

在Arangodb2.5.2(可能更早)中,我们编写的代码依赖于文档中允许空字符的值

在ArangoDB 2.6.1+中,NULL似乎充当字符串终止符,即使可能有更多的字符串数据。我们如何恢复以前的行为

例如,如果该值为
“value\u0000SubValue1\u0000SubValue2”
,则较新版本会很遗憾地截断:

2.5.2 => "value\u0000SubValue1\u0000SubValue2"
2.6.2 => "value"
我们使用NULL作为分隔符,因为我们知道这是一个不会出现在子字符串中的字符

更新 以下是从Windows上的shell中复制问题的步骤

arangosh [demo]> db._create("SO")
[ArangoCollection 848312398088, "SO" (type document, status loaded)]
arangosh [demo]> db.SO.save({ "v":"a\u0001b"})
{
  "_id" : "SO/848317640968",
  "_rev" : "848317640968",
  "_key" : "848317640968"
}
arangosh [demo]> db.SO.document("SO/848317640968")
{
  "v" : "a\u0001b",
  "_id" : "SO/848317640968",
  "_rev" : "848317640968",
  "_key" : "848317640968"
}
arangosh [demo]> db.SO.save({ "v":"a\u0000b"})
{
  "_id" : "SO/848320262408",
  "_rev" : "848320262408",
  "_key" : "848320262408"
}
arangosh [demo]> db.SO.document("SO/848320262408")
{
  "v" : "a",      // the rest of the value has been truncated
  "_id" : "SO/848320262408",
  "_rev" : "848320262408",
  "_key" : "848320262408"
}

而且,我在GitHub上创建了一个bug。

这确实是一个bug,但它只在特定情况下发生

是否触发它取决于如何检索文档(服务器内部的JavaScript函数或通过HTTP API、AQL或CRUD操作),以及文档是否以ShapedJson格式内部保存

在Linux下,当通过HTTP REST API检索文档并使用单个文档读取(即通过HTTP GET/_API/document/)时,我能够在以下情况下重现2.5和2.6的问题

以下是如何复制:

  • 创建集合并存储包含NUL属性值的文档:

    db._create("SO");
    db.SO.save({ "v": "a\u0000b", _key: "b" });
    
  • 然后从ArangoShell内部查询文档:

    db.SO.document("b")
    
这将返回截断的值:

{ 
  "v" : "a", 
  "_id" : "SO/b", 
  "_rev" : "4124146417077", 
  "_key" : "b" 
}
在arangod内部查询文档时,或者在ArangoShell中使用以下方法之一时,它可以正常工作:

db.SO.document("b")
  • db..any()
  • db..toArray()
我在2.6分支中提交了一个修复程序,最终将成为2.6.3版本


请注意,至少从2014年4月起,在上述情况下,在属性值中使用NUL字节似乎不起作用,这意味着它可能在2.5中不起作用,甚至在2.4和2.3中也不起作用。

我用arangosh:db.test.any()检查了linux版本。{u id:“test/1714178880”,“_key:“1714178880”,“_rev”:“1714178880”,“a”:“a\u0000b\u0000c”}带操作系统,您使用哪种驱动程序/语言?Windows、.NET。也尝试使用Web API。也许最好在github的.NET端打开一个问题?对我来说,当前的Web界面将其保存为json中的\\0;您可能需要在此处退出\(正如我所提到的,它在2.5版本中确实有效,因为那是我们之前使用的版本)。我也可以在2.5版本中触发该问题,但只有在上述情况下。应该从2.6.3开始解决:@wiredparie:你能确认它已修复吗?Bug tracker问题也仍然存在,我们将很快确认(需要几天时间才能回到那个项目)。