Я ищу функцию map/reduce, чтобы рассчитать статус в Design Document. Ниже вы можете увидеть пример документа из моей текущей базы данных.Карта/Уменьшить массив хэшей в CouchDB
{
"_id": "0238f1414f2f95a47266ca43709a6591",
"_rev": "22-24a741981b4de71f33cc70c7e5744442",
"status": "retrieved image urls",
"term": "Lucas Winter",
"urls": [
{
"status": "retrieved",
"url": "http://...."
},
{
"status": "retrieved",
"url": "http://..."
}
],
"search_depth": 1,
"possible_labels": {
"gender": "male"
},
"couchrest-type": "SearchTerm"
}
Я хотел бы избавиться от ключа status
и достаточно вычислить его из статусов URLs. Мой текущий by_status
вид выглядит следующим образом:
function(doc) {
if (doc['status']) {
emit(doc['status'], null);
}
}
Я попробовал несколько вещей, но ничего на самом деле не работает. Сейчас моя Map Function
выглядит следующим образом:
function(doc) {
if(doc.urls){
emit(doc._id, doc.urls)
}
}
и моя Reduce Function
function(key, value, rereduce){
var reduced_status = "retrieved"
for(var url in value){
if(url.status=="new"){
reduced_status = "new";
}
}
return reduced_status;
}
Результатом является то, что я получаю извлекаться везде, что, безусловно, не так.
Я попытался сузить проблему, и, похоже, что value
не имеет массива, когда я использую следующие Reduce Function
. Я получаю всю длину 1, что невозможно, потому что у меня есть 12 документов в моей базе данных, каждая из которых содержит 20 200 URLs
function(key, value, rereduce){
return value.length;
}
alt text http://img.skitch.com/20100316-qeawxgd5pru8d5i6bprygcsmhf.jpg
Что я делаю неправильно? (Я знаю, что хочу, чтобы вы писали код для меня, и я чувствую себя виноватым, но сейчас я делаю расчет статусов в рубине после получения данных из базы данных. Было бы неплохо уже получить правильные данные из база данных)
Что JSON.stringify (стоимость) возвращается? (JSON является родным объектом окна в Firefox 3.5+) – Alsciende