CouchDB文件:
"members": [
{
"name": "Mark",
"age": 35,
},
{
"name": "Bill",
"age": 32,
}
]
Run Code Online (Sandbox Code Playgroud)
使用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)
})
})
Run Code Online (Sandbox Code Playgroud)
我从上面的查询得到的结果是整个Members数组.但是当我要求"名称"作为"比尔"而不是完整的数组时,我只需要得到以下内容.
{
"name": "Bill",
"age": 32,
}
Run Code Online (Sandbox Code Playgroud)
我确实尝试了查询中的字段部分,但我无法找到应该提到的内容以获得我想要的内容.
只有在选择器选择给定文档后,才可以在文档中指定一组独立于索引的(静态)字段,以便 find 进行选择。
Mango 查询是处理常见情况的简化语法,当索引和查询的结构不典型时,您需要直接使用map/reduce ,如文档中所示:
Map/Reduce API 是为 Mango 查询过于复杂的情况而设计的
因此,您对第一个映射/归约示例的更改将类似于:
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
});
Run Code Online (Sandbox Code Playgroud)
要获得如下输出:
{
"offset" : 0,
"rows": [{
"id": "somedoc",
"key": "Bill",
"value": {name:'Bill', age:32}
}],
"total_rows" : 1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |