подсчитать количество тегов в документе couchdb

1

У меня простой дизайн документа, что-то вроде этого...

{
  _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}]}

Кто-нибудь знает как это сделать? Я довольно застрял. Спасибо.

Теги:
couchdb
mapreduce

1 ответ

0
Лучший ответ

У вас был недопустимый 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

Примечание. Замените значение <значение> на их реальное значение.

  • 0
    Есть ли способ заставить их вернуть заказ? Чтобы «теги», которые используются чаще, возвращались первыми?
  • 0
    На самом деле сортировка по карте и уменьшению производится только по ключу. Кроме сортировки по памяти, вы можете попробовать Mango Query.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню