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



CouchDB 文档:

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

来自 PouchDB 的数据库查询 使用 PouchDB-Find:

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

我从上面的查询中得到的结果是整个 Members 数组。但是当我请求"名称"作为"Bill"而不是完整的数组时,我只需要得到以下内容。

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

我确实尝试了查询中的字段部分,但我找不到应该提及的内容以获得我想要的内容。

只能在文档中指定一组与索引无关的(静态(字段,以便在选择器选择给定文档后查找。

Mango 查询是一种简化的语法,用于处理常见情况,当您的索引和查询的结构不典型时,您需要使用 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
}

最新更新