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,
}
我确实在查询中尝试了“字段”部分,但无法找到应该得到的提示。
答案 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
}