从 couchdb 中获取部分文档
Fetch partial documents from couchdb
我正在使用 couchdb 存储大型文档,这在将它们提取到内存中时造成了一些麻烦。我确实意识到数据库不应该以这种方式使用。作为后备解决方案,是否可以在不创建视图的情况下从数据库中获取部分文档?
例如,如果文档包含字段 id
、content
和 extra_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"
]
}
您只会获得您在查询中指定的字段集
我正在使用 couchdb 存储大型文档,这在将它们提取到内存中时造成了一些麻烦。我确实意识到数据库不应该以这种方式使用。作为后备解决方案,是否可以在不创建视图的情况下从数据库中获取部分文档?
例如,如果文档包含字段 id
、content
和 extra_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"
]
}
您只会获得您在查询中指定的字段集