根据 PouchDB 中的标签生成查询结果

Generate query results based on tags in PouchDB

我是 NoSQL 的新手,但我决定将 PouchDB 用于我正在创建的 Angular 应用程序。

将有一系列问题(总共约 1000 个),每个问题都有自己的标签。每个对象不应有超过 6 或 7 个标签。示例数据为:

{
    "text": "Question?",
    "answers": [
        { "text": "Yes", "correct": true },
        { "text": "No", "correct": false }
    ],
    "tags": ["tag1", "tag3"]
},
{
    "text": "Question?",
    "answers": [
        { "text": "Yes","correct": true },
        { "text": "No", "correct": false }
    ],
    "tags": ["tag2", "tag3"]
}

我完全不知道如何查询数据库以仅检索具有 "tag2" 的问题或具有 "tag1" 和 "tag3" 的问题。

我遇到了在 找到的问题,但我似乎无法理解它是如何工作的。我试图根据我的数据修改它,但在查询数据库时总是得到 0 个结果。

我想我最大的困难是将它与 SQL 进行比较,但事实并非如此。有谁知道如何根据特定标签创建查询?

是的,你创建一个 map/reduce query 这样的:

// document that tells PouchDB/CouchDB
// to build up an index on tags
var ddoc = {
  _id: '_design/my_index',
  views: {
    my_index: {
      map: function (doc) {
        doc.tags.forEach(function (tag) {
          emit(tag);
        });
      }.toString()
    }
  }
};
// save it
pouch.put(ddoc).then(function () {
  // success!
}).catch(console.log.bind(console));

那你查询一下:

pouch.query('my_index', {key: myTag, include_docs: true}).then(function (res) {
  // got a result
}).catch(console.log.bind(console));

如果你想找到多个标签,你可以 keys 而不是 key

顺便说一句,当我将 $elemMatch$in 添加到 pouchdb-find 时,将来会更容易。