对couchdb新手,我想与排序做一对多的关系
类别 - >文件
想要对每个类别中的类别和排序文档进行排序,并希望将结果作为数组。
我可以按类别或按文件排序,但不能同时排序。
我希望得到类似这样的查询结果:
[{ name: 'category1',
position: 1,
type: 'category',
documents: [{ name: ..., type: ..., position: 1 },
{ name: ..., type: ..., position: 2 },
{ name: ..., type: ..., position: 3 }
}
{ name: 'category2',
position: 2,
type: 'category',
documents: [{ name: ..., type ..position: 1 },
{ name: ..., position: 2 },
{ name: ..., position: 3 }]
}]
我设置了一个视图设计和地图函数(这是正确的方法吗?):
function(category) {
if (type == 'category') {
for (var d in category.documents) {
emit([category.position, category.documents[d].position??? ], {_id: category.documents[d], category: category })
}
}
问题是......
1- category.documents [d] .position不会“存在”,所以我不能简单地这样做。
2-查询结果没有按照我想要的方式格式化。它将是文档行,而不是带有文档对象数组的类行。
答案 0 :(得分:1)
CouchDB中没有任何关系。正确的方法是直接在文档上设置文档所属的类别。
{
_id: ...,
name: ...,
type: ...,
category: 1,
position: 1
}
答案 1 :(得分:1)
正如@OctavianDamiean所指出的,您应该在文档中添加一个类别字段。然后map函数就变成了:
function(doc) {
if (doc.type === 'Document') {
emit([doc.category, doc.position], 1);
}
}
使用include_docs=true
查询,您将获得:
[ { "key": ["category1", 1], "doc": { "name": "doc1.1", "type": "Document", "position": 1 } },
{ "key": ["category1", 2], "doc": { "name": "doc1.2", "type": "Document", "position": 2 } },
{ "key": ["category2", 1], "doc": { "name": "doc2.1", "type": "Document", "position": 1 } },
{ "key": ["category2", 2], "doc": { "name": "doc2.2", "type": "Document", "position": 2 } },
...
]