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