从 couchdb 中获取部分文档

Fetch partial documents from couchdb

我正在使用 couchdb 存储大型文档,这在将它们提取到内存中时造成了一些麻烦。我确实意识到数据库不应该以这种方式使用。作为后备解决方案,是否可以在不创建视图的情况下从数据库中获取部分文档?

例如,如果文档包含字段 idcontentextra_content,我只想检索前两个字段。

提前谢谢你。

在 CouchDB 2.x 之前这是不可能的。对于 CouchDB 2.x 或更高版本,请参阅 JuanjoRodriguez 的回答。

但是,对于任何版本的 CouchDB,一种可能的解决方法是利用文件附件,默认情况下,文件附件被排除在提取之外。如果您的某些数据并不总是需要,并且不需要包含在索引中,您可以将其存储为 (JSON) 附件,而不是直接作为文档的一部分:

{
    "id": "foo",
    "content": "stuff",
    "extra_content": "other stuff"
}

变成:

{
    "id": "foo",
    "content": "stuff",
    "_attachments": {
        "extra_content": {
            "content_type": "application/json",
            "data": "ZXh0cmEgc3R1ZmYK"
        }
    }
}

如果您使用的是 CouchDB 2.x,您可以使用 /db/_find 端点作为检索部分文档的机制。

POST /db/_find

  {
    "selector": {
      "_id": "a-doc-id"
    },
    "fields": [
      "_id",
      "content"
    ]
   }

您只会获得您在查询中指定的字段集