根据 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 时,将来会更容易。
我是 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" 的问题。
我遇到了在
我想我最大的困难是将它与 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 时,将来会更容易。