OrientDB SQL: включить риды из связанных вершин
У меня есть одна вершина "A", связанная с вершинами "B" и "C".
Я хочу запросить A с добавленным списком идентификаторов записей B и C.
Пример того, как могут выглядеть свойства:
A:
{
"@rid": "#1:0",
"property": "ValueForA"
}
B:
{
"@rid": "#2:0",
"property": "ValueForB"
}
C:
{
"@rid": "#2:1",
"property": "ValueForC"
}
Я хочу запрос для А, который дает мне:
{
"@rid": "#1:0",
"property": "ValueForA",
"connected": ["#2:0", "#2:1"]
}
Я бы предпочел быть в состоянии сделать это только с проекциями. Это прекрасно работает для любого настраиваемого поля в B и C, но для @rid я получаю ссылку (почему это несоответствие?).
Я пробовал:
SELECT @rid, *, out().@rid as connected FROM #1:0
Который дает мне именно то, что я хочу, но список в списке - это ссылки на записи, а не только список.
А также
SELECT @rid, *, out().@rid.asString() as connected FROM #1:0
Который дает:
{
"@rid": "#1:0",
"property": "ValueForA",
"connected": "[#2:0, #2:1]"
}
Где подключенное свойство это просто строка.
Вероятно, есть причина этого несоответствия @rid и других свойств. Как я уже писал, если @rid вместо "id", первый пример будет работать нормально. Несмотря на это, я хотел бы знать простой способ сделать это, потому что я чувствую, что это должно быть легко сделать.
Обновить
Добавление идентификатора в качестве примера свойства в приведенных выше примерах вводило в заблуждение, поскольку оно могло как-то намекать на то, что оно уникально (хотя я никогда не говорил этого), поэтому я удалил его. Я только добавил их, чтобы отделить 3 записи. Однако идентификатор записи - это то, что используется в качестве уникального идентификатора для разделения указанных выше вершин, поэтому использование каких-либо свойств записи невозможно. Чтобы уточнить далее, запись может иметь произвольные свойства. Не только примеры, приведенные выше.
Опять же, первый вопрос: возможно ли использование проекций?
Дополнительные комментарии: мне действительно странно, что я мог бы легко это сделать, если бы сделал свойство "rid", содержащее точно такой же идентификатор записи, что и @rid для каждой записи. Зачем мне это делать (я не буду этого делать), чтобы упростить его использование.
Update2
Я также хотел бы быть в состоянии предназначаться для нескольких вершин сразу и добавлять связи для каждой из них. Я делаю это уже, используя проекции, для многих свойств (но не @rid).
1 ответ
Тот факт, что запрос возвращает @rid как ссылку, является вполне нормальным, возможный способ сделать это. это может быть этот:
select id, property, $a from #21:0
let $a = (select out() from #21:0 where $parent.current.id = id)
это вывод:
Надеюсь, поможет.
С уважением