我是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进行比较。有谁知道如何根据特定标签创建查询?
答案 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时,这将会更容易。