我正在使用CouchDb存储我的文档并找出如何使用CouchDb视图在文档上提取1:1相关数据。
对于这个给定的文档结构,
{
_id: 'some_id',
doc_type: 'item',
name: 'Steel Caliper'
description: 'Steel Caliper description',
classification: {
_id: 'some_classification_id'
}
}
classification: {
_id: 'some_classification_id',
doc_type: 'classification',
name: 'Hand Tools'
}
当我使用下面的CouchDb视图检索项目文档列表时(使用include_docs = true调用)
function(doc) {
if(doc_type==='item') {
emit(doc.name, null);
}
}
我收到了项目文件,但没有提取分类数据。
{
"total_rows": 10,
"offset": 0,
"rows": [
{
"id": "some_id",
"key": "Steel Caliper",
"value": null,
"doc": {
"_id": "some_id",
"_rev": "1-65d32fe22a0b949ff73f23c65042ae3c"
"doc_type": "item"
"name": "Steel Caliper"
"classification": {
"_id": "some_classification_id"
}
}
},
{ ... }
}
有没有办法使用视图提取分类数据并得到如下所示的输出?
...
"doc": {
"_id": "some_id",
"_rev": "1-65d32fe22a0b949ff73f23c65042ae3c"
"doc_type": "item"
"name": "Steel Caliper"
"classification": {
"_id": "some_classification_id",
"doc_type": "classification",
"name": "Hand Tools"
}
}
...
答案 0 :(得分:1)
是的,这称为视图整理。如果要通过_ids加入,则可以发出多个文档。
在您的情况下,您可以致电
function(doc) {
if(doc_type==='item') {
emit(doc.name, null);
if( doc.classification ){
emit( doc.classification._id, {_id: doc.classification._id });
}
}
}
您可能仍然需要使用返回的结果来将其转换为您想要的形式。