pouchdb - 如何使用 PouchDB-Find 获取特定数据(从数组中)
问题描述
CouchDB 文档:
"members": [
{
"name": "Mark",
"age": 35,
},
{
"name": "Bill",
"age": 32,
}
]
使用 PouchDB-Find 从 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)
})
})
我从上述查询中得到的结果是整个成员数组。但是当我将“名称”请求为“比尔”而不是完整数组时,我只需要获取以下内容。
{
"name": "Bill",
"age": 32,
}
我确实尝试了查询中的字段部分,但我找不到应该提到什么来获得我想要的东西。
解决方案
一旦您的选择器选择了给定的文档,就只能在文档中指定一组与索引无关的(静态)字段以供 find选择。
Mango 查询是处理常见情况的简化语法,当索引和查询的结构不典型时,您需要直接使用map/reduce ,如文档中所示:
map/reduce API 专为 Mango 查询过于复杂的情况而设计
因此,您对第一个 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
}
推荐阅读
- perl - Perl 将 cpan 安装到特定存储库中
- dictionary - PhpStorm:我可以在全球词典中添加一个新词吗?
- flutter - How to check length of value in onchange method in flutter
- html - 如何修复我的活动列表项下没有边框?
- sql - 使用外键管理其他表中新传入数据的引用表
- java - 如何下载 REST API 响应文件?
- typescript - 未使用的属性 OnPrepare
- php - Laravel Eloquent 过滤记录与查询
- android - android - Dagger 2 注入多个接口和实现类
- django - ModelMultipleChoiceFilter - 字段 'id' 需要一个数字,但得到了 'Diner'