OrientDB - 找到“孤立的”二进制记录

时间:2016-07-26 11:45:53

标签: file binary orientdb

我的一些图像存储在OrientDB数据库的默认群集中。在使用多个ORecordByte(对于大内容)的情况下,我通过实现文档给出的代码来存储它们:http://orientdb.com/docs/2.1/Binary-Data.html

因此,我的默认群集中有两种类型的对象。二进制数据和ODocument,其字段'data'列出二进制数据的不同记录。

某些其他类中使用了一些ODocument记录的RID。但是,其他记录是孤立的,我希望能够检索它们。

我的想法是使用

select from cluster:default where @rid not in (select myField from MyClass)

但问题是我检索其他二进制数据而我只想要带有'data'字段的记录。

此外,我更喜欢有一个更漂亮的要求,因为我不认为“不在”条款确实应该被鼓励。是否有像JOIN这样的东西返回没有加入任何东西的记录?

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

为了解决我的问题,我确实喜欢这样。但是,我不知道这样做是否正确(更优化的方式):

我使用了以下SQL请求:

SELECT rid FROM (FIND REFERENCES (SELECT FROM CLUSTER:default)) WHERE referredBy = []

在Java中,我使用几个OCommandSQL / OCommandRequest执行它,然后检索OrientDynaElementIterable。我只是迭代最后一个来检索包含在另一个OrientVertex中的OrientVertex,从那里我检索orpan的RID。

现在,这里有一些代码,如果它可以帮助某人,假设你有一个OrientGraphNoTx或OrientGraph用于'图表'变量:)

String cmd = "SELECT rid FROM (FIND REFERENCES (SELECT FROM CLUSTER:default)) WHERE referredBy = []";
List<String> orphanedRid = new ArrayList<String>();
OCommandRequest request = graph.command(new OCommandSQL(cmd));
OrientDynaElementIterable objects = request.execute();
Iterator<Object> iterator = objects.iterator();
while (iterator.hasNext()) {
    OrientVertex obj = (OrientVertex) iterator.next();
    OrientVertex orphan = obj.getProperty("rid");
    orphanedRid.add(orphan.getIdentity().toString());
}