Рассказывать почему OrientDB очень крутая база, не стану. Расскажу неочевидные нюансы работы в связке с node.js.

inset if not exist. Вроде бы простой sql запрос, ан нет upsert здравствуй! Никогда не видели? Я тоже, а оно есть :)
update Words set word = :word upsert return after @rid where word = :word


Также обращаем внимание на эту часть:
return after @rid

Вернет новосозданный rid ;)

Создаем уникальные Edges
create class Votes extends E
create property Votes.in LINK
create property Votes.out LINK
create index Uniq on Votes (out, in) UNIQUE


И теперь oriento будет кидать ошибки при попытке вставить вторую одинаковую edge и чтобы их обрабатывать есть удивительный метод

db.create('EDGE', 'VotesEdge').from(user_rid).to(vote_rid).one().then(function (err) {})
.catch(function (err) {
      console.log(err); 
});


Не видели catch в документации oriento. Я тоже, а оно есть :)

Гуляем по связам(edges)
Это самая лучшая часть OrientDB. Если запись в базе связана с другой записью, посредством edge, то мы можем пройтись по десятку таблиц и вынуть нужное за 1 запрос. Работает, имхо, быстро. :)

Выберем никнеймы пользователей в комментариях
select out('ArticleCommentsEdge').out('CommentsUsersEdge').include('id', 'nick') as users


Чтобы понять, что здесь произошло, нужно немного поиграть с OrientDB.

include() — очень полезный метод

Предыдущую запсь можно написать так:
select out('ArticleCommentsEdge').out('CommentsUsersEdge').id, out('ArticleCommentsEdge').out('CommentsUsersEdge').nick


Новички так делают всегда, но недостатки налицо. Мы получим 2 массива(которые нужно стыковать), вместо одного массива объектов (users).

Количество edge
select out('VotesEdge').size();


Магический метод size(), выдает количество подобно count() в mysql.

Поначалу OrientDB кажется странноватой, но когда узнаешь её поближе, то сносит крышу :)

Комментарии ()