在PouchDB中查询嵌套对象

时间:2015-02-02 08:23:52

标签: javascript pouchdb nosql

我搜索了一些示例和教程,但无法为我的案例找到任何明确的例子。

我从我的服务器得到一个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看起来更复杂,并且能够进行此类查询。

提前谢谢你们

1 个答案:

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