Пытаясь обновить свойства, если они существуют, используя запрос gremlin, я получаю сообщение об ошибке «Не удается найти имя «имеет»»

#node.js #amazon-neptune #gremlin-server

#node.js #amazon-нептун #gremlin-сервер

Вопрос:

Пытаясь обновить свойства, если они существуют, используя запрос gremlin, я получаю сообщение об ошибке, Cannot find name 'has' и тот же запрос выполняется нормально в записной книжке Neptune. Но для того же самого в node.js Я получаю сообщение об ошибке при «имеет».

Ниже приведен запрос. Чего мне здесь не хватает? Graph.V(Id).hasLabel('test').optional(has('nameProperty').property(single,'nameProperty', 'value'))

Ответ №1:

При вызове из кода «анонимные» обходы — части запроса, не связанные с другими точкой, могут нуждаться в префиксе, __. как показано ниже:

 Graph.V(Id).
   hasLabel('test').
   optional(__.has('nameProperty').
      property(single,'nameProperty', 'value'))
 

На самом __. деле это специальный класс, который TinkerPop определяет для таких случаев, как этот. Обратите внимание, что во многих языках, таких как Java и Python, можно статически включать / импортировать этот класс, так что вам фактически не нужно использовать __. синтаксис, если вы не столкнетесь с коллизией зарезервированных слов с языком, например, not в Groovy.

Комментарии:

1. Я обновил его, как показано ниже, но все равно получаю ту же ошибку const __ = gremlin.process.statics; Graph.V(Id). hasLabel('test').optional(__.has('nameProperty').property(single,'nameProperty', 'value'))

2. Я только что провел тест, используя клиент 3.4.10 Gremlin JavaScript и Node.js и у него не было никаких проблем. Я не уверен, что может происходить в вашей среде.

3. В случае, если это поможет, это импорт, который я использовал в своем тесте: const gremlin = require('gremlin'); const Graph = gremlin.structure.Graph; const __ = gremlin.process.statics; const { t,order,cardinality,column,scope,pop,operator,P,traversal } = gremlin.process;