Как запросить несколько таблиц (объединить) с LokiJS?
Поскольку я не могу использовать SQLite в приложении node-webkit, я смотрю на LokiJS, но не могу найти простой способ создания объединений или каких-либо отношений между двумя наборами данных.
Один набор данных - художники, а другой - медиа. Поскольку он может содержать 5000 художников и миллион медиа, я думаю, что было бы лучше избежать повторения, сделав художника субдокументом медиа. Кроме того, если я изменю художника на 1000 медиа-записей, это потребует много написания вместо того, чтобы просто обновлять одну запись в наборе данных Artist.
Единственное объединение, которое я нашел, создало возвращенный json следующим образом
Object {
left: {
// artists
},
right: {
// media
}
}
Я бы предпочел что-то более традиционное:
{
artist_id:
artist_name:
media_id:
media_title:
}
Я посмотрел на NeDB, который предлагает присоединения легче, но не обновлялся уже более 2 лет. и я не могу заставить SQLite3 скомпилировать для nodewebkit 0.28.0 и не получил ответов от SO. В любом случае, с LokiJS играть куда интереснее, так как он находится в памяти и на диске.
Так, как я могу присоединиться к художникам и СМИ?
Спасибо!
1 ответ
joinResult.map(data => {
let a = {}
a.artist_id = data.left.artist_id
a.artist_name = data.left.artist_name
a.media_id = data.right.media_id
a.media_title = data.right.media_title
return a
})
Используйте lodash для окончательной обработки данных.
Я не думаю left
, right
объект должен быть проблемой здесь. Код, который я использую
const q = db.card.eqJoin(db.deck, "deckId", "$loki", (l, r) => {
const {front, back, note, srsLevel, nextReview, tags} = l;
return {
front, back, note, srsLevel, nextReview, tags,
deck: r.name
};
}).find(query);
const count = q.copy().count();
const data = q.offset(offset).limit(limit).data();