我搜索了一些示例和教程,但无法为我的案例找到任何明确的例子。
我从我的服务器得到一个JSON响应:
var heroes = [
{
id: 5,
name: 'Batman',
realName: 'Bruce Wayne',
equipments: [
{
type: 'boomarang',
name: 'Batarang',
},
{
type: 'cloak',
name: 'Bat Cloak',
},
{
type: 'bolas',
name: 'Bat-Bolas',
}
]
},
{
id: 6,
name: 'Cat Woman',
realName: 'Selina Kyle',
equipments: [
{
type: 'car',
name: 'Cat-illac',
},
{
type: 'bolas',
name: 'Cat-Bolas',
}
]
}
];
我想查询一下例如:"获得设备类型为bolas的英雄" 它应该返回数组中的两个英雄对象。
我知道这不对,但我要做的是形成这样的地图功能:
function myMapFunction(doc) {
if(doc.equipments.length > 0) {
emit(doc.equipment.type);
}
}
db.query(myMapFunction, {
key: 'bolas',
include_docs: true
}).then(function(result) {
console.log(result);
}).catch(function(err) {
// handle errors
});
有可能吗?如果不是我有什么替代品?
P.S:我还检查了LokiJS和underscoreDB。然而,PouchDB看起来更复杂,并且能够进行此类查询。
提前谢谢你们
答案 0 :(得分:2)
你的地图功能应该是:
function myMapFunction(doc) {
doc.equipments.forEach(function (equipment) {
emit(equipment.type);
});
}
然后要查询,请使用{key: 'bolas'}
:
db.query(myMapFunction, {
key: 'bolas',
include_docs: true
}).then(function (result) {
// got result
});
然后您的结果将如下:
{
"total_rows": 5,
"offset": 0,
"rows": [
{
"doc": ...,
"key": "bolas",
"id": ...,
"value": null
},
{
"doc": ...,
"key": "bolas",
"id": ...,
"value": null
}
]
}
还要先确保创建索引!详细信息位于PouchDB map/reduce guide:)