我的一些图像存储在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这样的东西返回没有加入任何东西的记录?
你能帮我吗?
答案 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());
}