2016-09-12 2 views
1
Var message = var().isa("message"); 
insert(message).execute(); 

Var relation = var().isa("connection") 
    .rel("role1", id("existing-id")) 
    .rel("role2", message); 
insert(relation).execute(); 

Выполнение следующих действий создает два экземпляра сообщения.Запрос на вставку Graql: дублированные объекты Var

Ожидается ли это? Если это так, это потому, что я не назначил идентификатор, или потому, что я использовал два оператора insert?

ответ

1

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

Var message = var().id("my-message").isa("message"); 

Причина это происходит потому, что Var не представляет собой единую концепцию. Вместо этого он представляет шаблон, который будет соответствовать на графике. В этом случае в Var говорится только «вещи, которые являются сообщениями», а не какое-либо конкретное сообщение.

Вы также можете присвоить имя переменной, например. Var message = var("x"). ... Для этого вам нужно будет выполнить только один insert.

+0

Но почему переменная 'message' вставляется во второй оператор? Разве мы не вставляем переменную 'relation'? А после того, как было выполнено первое «сообщение», должна ли обновляться переменная 'message', чтобы ссылаться на введенную концепцию? –

+0

Запрос вставки вставляет все шаблоны, переданные ему, включая любые «вложенные» шаблоны, такие как «сообщение» в «отношении» выше. 'message' - это просто компонент запроса, а не конкретный объект на графике. Он представляет собой понятие «вещь, которая является сообщением», а не какое-либо конкретное сообщение. –

 Смежные вопросы

  • Нет связанных вопросов^_^