简体   繁体   中英

OrientDB - filter selected vertices by other vertices connected to them

I'm not an OrientDB profi, so maybe my question will sound dumb; but I didn't find any answers in docs or on the Net.

This is a sample of a data structure that I have: I want to find all of the beavers, that have blue eyes, and they're happy and they know it.

I do manage to select the eye color and the happiness state with out() function - something like

SELECT out('has').eyeColors, out('is').happinessState FROM beavers

But how do I filter by those connected vertices? I've tried

SELECT * FROM beavers WHERE out('has').eyeColors = 'blue' AND out('is').happinessState = 'happy and knows it'

and

SELECT * FROM beavers WHERE (SELECT out('has').eyeColors FROM beavers) = 'blue' AND (SELECT out('is').happinessState FROM beavers) = 'happy and knows it'

but both of the query types tend to return empty results.

So - how can I achieve such a selection?

*I run Community Edition, v. 2.1.11, and do all of this in server-side JS function.

Thanks, Gregory

in the WHERE condition you need to use the CONTAINS word because the out() - so for in() and both() - returns a list.

eg

select from Beaver where out('has').eyeColors contains "Blue" and out("iss").happinessState contains "happy and knows it"

You can verify whether it returns a list or not by selecting it:

select out('has').eyeColors from Beaver

PS

I see that you're using an edge class called is that, I think, it's not allowed since it is a private word.


Hope it helps. Ivan


UPDATE

select name from Children
let $a=(select from Beaver where in('has').@rid contains $parent.$current.@rid and out('has').eyeColor contains "Blue" and out("iss").happinessState contains "happy and knows it")
where $a.size() > 0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM