获取Orientdb中schema-hybrid类的所有已使用字段名

时间:2015-06-11 17:34:27

标签: orientdb

我开始研究OrientDB并尝试使用OrientDB编写一个简单的webapp作为数据库。

我有一个架构混合数据库架构,其中包括类Server。 是否有可能获得所有使用的字段,甚至是未在模式中定义的字段?因此,在webapp前端,可以向用户显示其他服务器中存在的字段列表。

以下情况:

CREATE CLASS Server EXTENDS V
CREATE PROPERTY Server.name string
CREATE PROPERTY Server.hostnames embeddedlist string
CREATE VERTEX Server SET name = "SRV1",hostnames = ["srv1.de.test.ag","srv1.test.ag"], cpu = "3-GHZ"

我可以使用以下命令获取模式中定义的字段:

select expand(properties) from (select expand(classes) from metadata:schema) where name = "Server"

但是有没有办法获得cpu - 字段或者更确切地说这个类中使用的所有无模式字段?无法在文档中找到某些内容。

1 个答案:

答案 0 :(得分:1)

从概念上讲,Schema-Hybrid意味着什么;

  • 让您为一个类定义一个模式,以便每个记录(或 实例)符合架构
  • 让每个记录(或实例)定义它自己的自定义字段

因此,创建的自定义字段实际上是单个记录级别。因此,除了从模式定义的字段外,两个实例可以有两组不同的自定义字段。

由于上述原因,获取所有字段(即模式定义+自定义)的唯一方法是扫描所有记录,并找出每个记录在自定义中定义的内容。

您可以使用API​​执行此操作。以下是如何通过JavaScript调用API。你可以用Java做同样的事情。

var db = orient.getGraph();

var result = db.command("sql", "SELECT FROM V WHERE @rid = #9:2");
var fields = result[0].getRecord().fieldNames();

for (var i = 0; i < fields.length; i++) {
  print(fields[i]);
}

如果确保所有记录(即所有Server或Server1记录)都具有相同的自定义字段集,则可以使用上述代码查询一条记录并获取该记录的所有字段。那就是为你做的工作。

希望这有帮助!