TinkerPop не допускает значений null
в свойствах (хотя, я полагаю, вы можете найти там некоторые графические базы данных, допускающие различную семантику), поэтому вам следует заранее проверить данные, чтобы убедиться, что они имеют какое-то значимое «пустое значение» в отличие от null
. Если вы не можете этого сделать по какой-то причине, я думаю, вы могли бы использовать choose()
step для «проверки на ноль»:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko],age:[29]]
gremlin> age = null
gremlin> g.V().has('person','name','marko').choose(constant(age).count().is(0), properties('age').drop(),property('age',age))
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko]]
gremlin> age = 30
==>30
gremlin> g.V().has('person','name','marko').choose(constant(age).count().is(0), properties('age').drop(),property('age',age))
==>v[1]
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko],age:[30]]
Проверка для "является нулем" в основном просто: constant(age).count().is(0)
, который опирается на семантику Гремлин для значений null
в потоке, который является пустым и дает count()
нуля. Это работает, но делает ваш Gremlin немного менее читабельным. Это может быть хорошим шагом DSL , который нужно добавить, если вам нужно много писать.