OrientDB从所有图类中选择记录计数

时间:2016-06-14 13:22:32

标签: orientdb orientjs

获取每个图表类(V,E及其子类)的记录计数的任何方法?

我尝试以SQL格式为当前案例构建查询:

SELECT @class, count(*) FROM V GROUP BY @class
SELECT @class, count(*) FROM E GROUP BY @class

但是使用count() + GROUP BY是非常缓慢的组合。

虽然控制台命令list classes能够快速运行并返回每个类(字段RECORDS)中记录计数的值,但是如何通过SQL查询(或通过OrientJS API)提取此计数?

2 个答案:

答案 0 :(得分:0)

我认为这是不可能的,也因为它不会像在控制台中那么快

答案 1 :(得分:0)

主要想法是找到一种方法:

  1. 获取所有类的列表,如果数据库
  2. 获取存储在每个班级中的记录数
  3. 技术细节

    在OrientDB函数中,您可以访问具有orient方法的.getDatabase()变量。此方法返回JAVA ODatabaseDocumentTx类实例。此类提供了方法.countClass(className),该方法返回类classNamemethod documentation)的记录数,并且它的工作速度非常快。

    <强>解决方案

    在OrientDB Studio中创建名为“getClassCounts”的函数,语言“javascript”,idempotent:true:

    var db = orient.getDatabase();
    var classesRawInfo = db.getMetadata().getImmutableSchemaSnapshot().getClasses().toArray();
    var classesList = {};
    var i = classesRawInfo.length;
    
    while(--i) {
        var className = classesRawInfo[i].name;
        classesList[className] = db.countClass(className);
    }
    
    return classesList;
    

    执行:

    • 通过SQL:SELECT getClassCounts()