【问题标题】:How to pull embedded 1:1 data on a CouchDb document如何在 CouchDb 文档中提取嵌入的 1:1 数据
【发布时间】:2017-03-30 09:56:47
【问题描述】:

我正在使用 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"
       }
    }
...

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    是的,这称为视图排序规则。如果您通过 _ids 加入,则可以发出多个文档。

    在你的情况下,你可以打电话

    function(doc) {
       if(doc_type==='item') {
         emit(doc.name, null);
         if( doc.classification ){
             emit( doc.classification._id, {_id: doc.classification._id });
         }
    
       }
    }
    

    您可能仍需要处理返回的结果以将其转换为您想要的形式。

    http://docs.couchdb.org/en/2.0.0/couchapp/views/joins.html

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多