как фильтровать свойства со значениями в Нептуне + nodejs - PullRequest
0 голосов
/ 28 мая 2020

с Нептуном + nodejs

g.V().hasLabel('A').properties()

возвращает:

id, label, value
1, 'p1','v1'
2, 'p1','b2'
3, 'p1','b3'
4, 'p1','d4'

как мне сделать фильтр, чтобы он возвращал только:

id, label, value
2, 'p1','b2'
3, 'p1','b3'

Я пробовал

g.V().hasLabel('Device').properties().value().is(containing('b'))

, но выдает ошибку UnsupportedOperationException

Я также пробовал g.V().hasLabel('Device').where(properties().value().is(containing('b')))

та же ошибка, но я думаю, это из-за того, что у меня разные типы данных в нескольких свойствах, содержащийся метод не удалось, когда он встретил числовой тип .....

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вероятно, вам не нужно использовать properties, если вы не планируете делать что-то вроде удаления свойства. Вы должны иметь возможность просто сделать:

g.V().hasLabel('Device').has('value',containing('b'))

Я предполагаю, что «значение» - это имя вашего свойства. Если это не так, уточните.

EDITED, чтобы добавить больше примеров.

Если вы хотите протестировать все свойства, вы можете сделать что-то вроде этого, чтобы найти подходящие свойства.

gremlin> g.addV('test').property('x','Hello').
                        property('y','Another one').
           addV('test').property('y','Goodbye')

==>v[12b93051-decf-3be5-85cd-cbc4c27e42f9]

g.V().hasLabel('test').
      properties().hasValue(TextP.containing('ll'))

==>vp[x->Hello]

Если вам нужна вершина, содержащая свойства

gremlin> g.V().hasLabel('test').
             where(properties().hasValue(TextP.containing('ll')))

==>v[14b93051-dece-db72-9f46-46df7513a14c]
0 голосов
/ 28 мая 2020

Вы можете использовать filter :

g.V().hasLabel('Device').filter({ it.getProperty("value").startsWith("b") })

или

g.V().hasLabel('Device').filter({ it.getProperty("value").contains("b") })

EDIT: этот запрос работает в чистой версии Gremlin, а не в версии Neptune.

...