Ориентировать многократный ход

У меня есть этот график:

Ориентировать многократный ход

И я пытаюсь написать запрос с «синтаксисом SQL» OrientDB v3.0, который начинается с клиента и следует пути чтения (X означает: и не имеют Have отношения к Клиенту).

Я могу получить Сегменты, но не нахожу, как дойти до Контакта. документы имеют много примеров, но только по одному пути.

Я безуспешно пробовал эти запросы:

SELECT FROM  (TRAVERSE out("Access").out("Contain") FROM (SELECT @rid FROM Client where myId = 30543) MAXDEPTH 1)


SELECT FROM (
    TRAVERSE out("Contain") FROM
        (TRAVERSE out("Access") FROM (SELECT @rid FROM Client where myId = 30543) MAXDEPTH 1)
    MAXDEPTH 1
)

SELECT out('Access').out("Contain") FROM Client WHERE myId = 30543

Есть ли у вас какая-либо информация для выполнения этого траверса?

Я использую API Node.js:

const pool = await orient.getPool();
const session = await pool.acquire();

logger.info('Running query...');
session.command(`SELECT out('Access').out("Contain") FROM Client WHERE myId = 30543`)
  .on('data', (data) => {
    if (data.out_Contain && data.out_Contain.delegate) {
      logger.info('Segment %s contains %o Contact', data['@rid'].toString(), data.out_Contain.delegate.size);
    } else if (data['@rid']) {
      logger.info('Segment %s contains %o Contact', data['@rid'].toString(), data);
    } else {
      logger.info('Data %o', data);
    }
  })
  .on('error', (err) => {
    logger.error(err);
  })
  .on('end', () => {
    console.timeEnd('query');
    logger.info('End of the stream');
    process.emit('SIGINT');
  });

logger.debug('Registering SIGINT');
process.once('SIGINT', async () => {
  await session.close();
  await pool.close();
  await orient.stop();
});
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
153
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, попробуйте использовать этот код:

"select out_{edgeclass}.in from (select expand(out_{edgeclass}.in) from {Vetex} where {condition})"

Я получаю те же строки с этим: SELECT out_Access.in FROM Client WHERE myId = 30543

Manuel Spigolon 10.04.2019 17:08
Ответ принят как подходящий

match лучше подходит для таких задач.

С SELECT:

In the first version, the query is more readable, but it does not use indexes, so it is less optimal in terms of execution time. The second and third use indexes if they exist, (on Person.name or City.name, both in the sub-query), but they're harder to read. Which index they use depends only on the way you write the query.

Но соответствие:

the query executor optimizes the query for you, choosing indexes where they exist. Moreover, the query becomes more readable, especially in complex cases, such as multiple nested SELECT queries.

Вот правильный запрос:

SELECT EXPAND(contatti) 
    FROM ( 
      match { class: Client, as: user, where : ( myId = 30543)}
        .out('Access')
        .out('Contain'){ class:Contact, as:contatti, where: (gender= 'M')},
      NOT {as:user} -Have-> {as:contatti} 
      RETURN DISTINCT contatti LIMIT 1000
    )

Другие вопросы по теме