У меня простой дизайн документа, что-то вроде этого...
{
_id: "something",
type: "post",
title: "A Title",
content: "A Blog Content",
tags: ["newtag", "oldtag", "bluetag", "youtag"]
}
Поэтому каждый документ будет иметь массив "тегов". То, что я пытаюсь сделать, - создать представление, которое будет подсчитывать, сколько раз используется тег. Таким образом, он будет искать все документы, испускать теги, а затем добавлять их по ключевым словам. Пример...
Doc1
{
_id: "something",
type: "post",
title: "A title",
content: "Blog Content",
tags: ["oldtag", "newtag", "bluetag", "youtag"]
}
Doc2
{
_id: "domethin",
type: "post",
title: "another title",
content: "another post",
tags: ["oldtag", "notag", "whytag"]
}
Учитывая, что мне нужно что-то, что было бы "oldtag": 2, "notag": 1, "whytag": 1,...
Но я не могу понять это. Я пробовал использовать....
"map": "function(doc) {if(doc.type == 'post') { for(var i = 0, l doc.tags.length; i < l; i++) { emit(doc.tags[i], 1); } } }",
"reduce": "_count"
но это просто дает мне...
{"rows": [{"key": null, "value": 20}]}
Кто-нибудь знает как это сделать? Я довольно застрял. Спасибо.
У вас был недопустимый javascript.
var я = 0; l doc.tags
l следует назначить doc.tags.length
См. Исправленную версию:
{
"_id": "_design/tagcount",
"_rev": "1-d14c9d06e652ad23df1044ffbca9d85f",
"views": {
"count": {
"reduce": "_count",
"map": "function (doc) {\n if(doc.type== 'post') { \n for(var i = 0, l= doc.tags.length; i < l; i++) { emit(doc.tags[i], 1); } } \n}"
}
},
"language": "javascript"
}
Кроме того, вам необходимо указать сокращение:
http://localhost:5984/<db>/_design/<design>/_view/<viem>?limit=20&reduce=true&group=true
Примечание. Замените значение <значение> на их реальное значение.