查询 PouchDB 中的嵌套对象

Querying nested objects in PouchDB

我在谷歌上搜索了一些示例和教程,但找不到适合我的案例的任何明确示例。

我从服务器收到这样的 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',
        }      
    ]
}
];

我想查询例如:"get heroes with equipment type of bolas" 它应该 return 数组中的两个英雄对象。

我知道这是不对的,但我想做的是形成一个像这样的地图函数:

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 看起来更复杂并且能够进行此类查询。

提前谢谢大家

你的地图函数应该是:

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 :)