OrientDB в связке с Node.js. Неочевидное и невероятное

от автора

Рассказывать почему 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 кажется странноватой, но когда узнаешь её поближе, то сносит крышу 🙂

ссылка на оригинал статьи http://habrahabr.ru/post/257061/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *