【问题标题】:How to query multiple tables (join) with LokiJS?如何使用 LokiJS 查询多个表(连接)?
【发布时间】:2018-02-04 08:19:12
【问题描述】:

由于我无法在 node-webkit 应用程序中使用 SQLite,因此我正在研究 LokiJS,但我似乎无法找到一种简单的方法来在 2 个数据集之间建立连接或某种关系。

一个数据集是艺术家,另一个是媒体。 既然它可能容纳 5000 位艺术家和 100 万个媒体,我认为最好通过将艺术家作为媒体的子文档来避免重复。此外,如果我修改 1000 个媒体条目的艺术家,则需要大量编写,而不是仅更新艺术家数据集中的单个条目。

我发现的唯一连接创建返回的 json 如下:

Object {
  left: {
    // artists
  },
  right: {
    // media
  }
}

我更喜欢更传统的东西,比如:

{
  artist_id:
  artist_name:
  media_id:
  media_title:
}

我查看了 NeDB,它更容易提供加入,但现在已经 2 年多没有更新了。而且我无法让 SQLite3 为 nodewebkit 0.28.0 编译并且没有得到 SO 的答案。无论如何,LokiJS 看起来更有趣,因为它在内存和磁盘上。

那么我怎样才能加入艺术家和媒体?

谢谢!

【问题讨论】:

    标签: join node-webkit 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 进行最终的数据操作。

    【讨论】:

      【解决方案2】:

      我不认为leftright 对象在这里应该是个问题。我使用的代码是

      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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        相关资源
        最近更新 更多