我在名为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
null还是我遗漏了什么?
答案 0 :(得分:2)
存储文档中的_id
字段来自特殊的velocypack类型,Json不支持该类型,并且包含文档存储的collection-id。
要在人类可读的&#34;集合名称/文档密钥&#34;中正确地反序列化该字段。反序列化过程需要知道给定collection-id的collection-name。只有当进程可以调用数据库或java驱动程序的内部集合高速缓存时,才可以执行此操作。只有在调用getDocument(String,Type)或其他API方法时,反序列化过程才能访问此方法。 VPackParser
是一个独立的Velocypack&lt; - &gt; Json解析器,无法解析字段_id
。
String json = db.db("cms").collection("test").getDocument("2469", String.class);
与您的通话一样,当您将type
设置为String
时,会使用toJson()
实例上的方法VPackParser
,该方法可以访问数据库和收集 - 缓存,因此可以在将velocypack解析为json时正确地对字段_id
进行干扰。
如果您想要从api调用中单独反序列化Velocypack(正确解析_id
),您可以使用从ArangoUtil
util()
上获得的类ArangoDB
ArangoDatabase
1}},ArangoCollection
或VPackSlice slice = db.db("<db>").collection("test").getDocument("2469", VPackSlice.class);
String json = db.util().deserialize(slice, String.class);
。
{{1}}