PouchDB 中的物化视图

Materialized views in PouchDB

有没有办法在 PouchDB 中创建物化视图?我想要这个是因为数据几乎是静态的,但用户经常查询。

那里静得像物化景。 您更改数据,用户执行查询,PouchDB 围绕索引工作,首先 'indexing' 一切都像物化视图一样工作,在内存中建立索引,直到发生变化并且我们在下一个查询中更新索引。一遍又一遍。

https://pouchdb.com/guides/queries.html

Persistent queries Persistent queries are much faster, and are the intended way to use the query() API in your production apps. To use persistent queries, there are two steps.

First, you create a design document, which describes the map function you would like to use:

// document that tells PouchDB/CouchDB
// to build up an index on doc.name

var ddoc = {
  _id: '_design/my_index',
  views: {
    by_name: {
      map: function (doc) { emit(doc.name); }.toString()
    }
  }
};
// save it
pouch.put(ddoc).then(function () {
  // success!
}).catch(function (err) {
  // some error (maybe a 409, because it already exists?)
});

然后你实际查询它,使用你在保存时给设计文档的名称:

db.query('my_index/by_name').then(function (res) {
  // got the query results
}).catch(function (err) {
  // some error
});

请注意,第一次查询时,它会很慢,因为在您查询之前不会建立索引。要解决这个问题,您可以执行一个空查询来启动新构建:

db.query('my_index/by_name', {
  limit: 0 // don't return any results
}).then(function (res) {
  // index was built!
}).catch(function (err) {
  // some error
});