如何使用PouchDB获取(从数组中)特定数据

时间:2018-09-27 08:03:06

标签: pouchdb

CouchDB文档:

  "members": [
    {
      "name": "Mark",
      "age": 35,
    },
    {
      "name": "Bill",
      "age": 32,
    }
  ]

使用PouchDB查找来自PouchDB的数据库:

  db.createIndex({
    index: {fields: [
      '_id',
      'members.[].name'
    ]}
  }).then(() => {
    db.find({
      'selector': {
        '_id': { '$gt': null },
        'members': {
          '$elemMatch': {
            'name': {'$eq': 'Bill'}
          }
        }
      },
      'fields': [
        'members'
      ]
    }).then((result) => {
      console.log(result)
    }).catch((err) => {
      console.log(err)
    })
  })

我从上面的查询中获得的结果是整个Member数组。但是当我要求“名称”为“账单”而不是完整的数组时,我只需要获取以下内容。

{
  "name": "Bill",
  "age": 32,
}

我确实在查询中尝试了“字段”部分,但无法找到应该得到的提示。

1 个答案:

答案 0 :(得分:0)

仅当选择器选择了给定文档后,才可以在文档中指定一组与索引无关的(静态)字段以查找pick

芒果查询是用于常见情况的简化语法,当索引和查询的结构不典型时,您需要使用map/reduce 直接按照文档中的指示进行操作:

  

map / reduce API专为过于复杂的情况而设计   芒果查询

因此,您对第一个map / reduce示例的更改如下所示:

function mapFun(doc) {
    if (doc.members)
      doc.members.forEach( function(m) {
        emit(m.name, m);  // key is name, value is the individual member Object
      });
  }.toString()
  ...
  return db.query('index', {
    key: 'Bill',
    include_docs: false
  });

要获得如下输出:

 {
  "offset" : 0,
  "rows": [{
    "id": "somedoc",
    "key": "Bill",
    "value": {name:'Bill', age:32}
  }],
  "total_rows" : 1
}