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

时间:2015-09-22 15:23:26

标签: angularjs couchdb 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”的问题。

我遇到了How to query PouchDB with SQL-like operators发现的问题,但似乎无法理解其工作原理。我尝试根据我的数据修改它,在查询数据库时总是得到0结果。

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

1 个答案:

答案 0 :(得分:2)

是的,您可以像这样创建一个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时,这将会更容易。