东方数据库 - 查找"orphaned"二进制记录



我在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这样的返回未连接到任何内容的记录的东西?

你能帮我吗?

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

我使用了以下SQL请求:

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

在Java中,我使用两个OCommandSQL/OCommandRequest来执行它,并检索OrientDynaElementIterable。我只是对最后一个进行迭代,以检索另一个OrientVertex中包含的OrientVertix,从中检索orpan的RID。

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

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());
}

相关内容

  • 没有找到相关文章

最新更新