Как рассчитать элементы в свойстве в гремлине? - PullRequest
0 голосов
/ 14 января 2020

Привет! У меня есть узел, представляющий электронную почту, и одно из свойств - это получатели (например, {'john@doe.com', 'max@example.com'}. Есть ли способ, которым я могу подсчитать, сколько получателей на каждое письмо? есть

1 Ответ

3 голосов
/ 14 января 2020

Предполагая, что:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property('emails','["x@x.com","y@y.com"]')
==>v[0]

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

g.V(0L).values('emails').count()

У Gremlin просто нет нативных методов синтаксического анализа JSON, поэтому у меня остается два варианта:

  1. Использовать лямбду и Groovy JsonSlurper
  2. Просто верните строку JSON и проанализируйте ее на клиенте, чтобы получить ваш счет на вашем родном языке программирования.

Если вы использовали лямбда это будет выглядеть так:

gremlin> json = new groovy.json.JsonSlurper()
==>groovy.json.JsonSlurper@421a4ee1
gremlin> g.V(0L).values('emails').map{json.parseText(it.get())}
==>[x@x.com,y@y.com]
gremlin> g.V(0L).values('emails').map{json.parseText(it.get())}.count(local)
==>2

Обратите внимание, что это предполагает, что ваш график поддерживает лямбда-выражения и что вы можете использовать JsonSlurper в этой среде. Обычно мы стараемся заставить людей избегать лямбда-выражений, поэтому вашим лучшим выбором будет лучше моделировать ваши данные (например, с несколькими объектами или List) или обрабатывать JSON локально.

...