我开始研究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
- 字段或者更确切地说这个类中使用的所有无模式字段?无法在文档中找到某些内容。
答案 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记录)都具有相同的自定义字段集,则可以使用上述代码查询一条记录并获取该记录的所有字段。那就是为你做的工作。
希望这有帮助!