【问题标题】:VelocyPack VPackParser returns null _key from toJson methodVelocyPack VPackParser 从 toJson 方法返回 null _key
【发布时间】:2017-02-20 01:56:13
【问题描述】:

我在名为 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 留空还是我遗漏了什么?

【问题讨论】:

    标签: java arangodb


    【解决方案1】:

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

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

    在您的调用中,当您将type 设置为String 时,使用VPackParser 实例上的toJson() 方法,该方法可以访问数据库和集合缓存,因此可以正确反序列化该字段_id 将 velocypack 解析为 json 时。

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

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

    【讨论】:

    • 谢谢。不管你如何反序列化,驱动程序是否使用速度传输?
    • 是的。一切都被序列化/反序列化到/从 Velocypack 并使用二进制协议 Velocystream 传输。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多