VelocyPack VPackParser 从 toJson 方法返回空_key



我在一个名为 test 的集合中有以下文档:

[
{
"_key": "2469",
"_id": "test/2469",
"_rev": "_Ujegqfu---",
"fieldName": "some value"
}
]

我使用以下两种方法检索它:

public Result helloWorldJson() {
ArangoDB db = new ArangoDB.Builder().user("<user>").password("<pass>").build();
VPackParser parser = new VPackParser() ;
VPackSlice slice = db.db("<db>").collection("test").getDocument("2469", VPackSlice.class);      
String json = db.db("cms").collection("test").getDocument("2469", String.class);
return Results.text().render("{velocy: " + parser.toJson(slice, true) + ", json: " + json);
}

产生此输出:

{velocy: {"_key":"2469","_id":null,"_rev":"_Ujegqfu---","fieldName":"some value"}, json: {"_key":"2469","_id":"test/2469","_rev":"_Ujegqfu---","fieldName":"some value"}

VPackParser 是故意将_id留为空还是我错过了什么?

存储文档中的_id字段来自Json不支持的特殊velocypack类型,并且包含存储文档的集合ID。 要在人类可读的"集合名称/文档键"中正确反序列化此字段,反序列化过程需要知道给定集合 ID 的集合名称。仅当进程可以调用数据库或 java 驱动程序的内部集合缓存时,这才有可能。只有当你调用getDocument(String,Type)或其他API方法时,反序列化过程才能访问它。VPackParser是一个独立的 Velocypack<->Json 解析器,无法解析字段_id

String json = db.db("cms").collection("test").getDocument("2469", String.class);

与调用中一样,当您将type设置为StringVPackParser实例上的方法toJson()时,将使用该方法,该方法可以访问 dabase 和集合缓存,因此可以在将 velocypack 解析为 json 时正确解_id字段。

如果你想将 Velocypack 与 api 调用分开反序列化(正确解析_id),您可以使用从ArangoDBArangoDatabaseArangoCollection上的方法util()获得的类ArangoUtil

VPackSlice slice = db.db("<db>").collection("test").getDocument("2469", VPackSlice.class);
String json = db.util().deserialize(slice, String.class);

最新更新