Почему эта функция отображения MapReduce не работает?

У меня есть база данных Cloudant с документами, которые используют следующий формат:

{
  "_id": "0ea1ac7d5ef28860abc7030444515c4c",
  "_rev": "1-362058dda0b8680a818b38e9c68c5389",
  "text": "text-data",
  "time-data": 1452988105,
  "time-text": "3:48 PM - 16 Jan 2016",
  "link": "http://url/to/website"
}

Я пытаюсь создать представление, чтобы легко считать документы между началом и концом time-data, Однако эта функция отображения приводит к запросу, возвращающему "Документы не найдены":

function (doc) {
  emit(doc.time-data, 1);
}

... в то время как это делает:

function (doc) {
  emit(doc._id, 1);
}

Почему это так?

1 ответ

Решение

Вопрос с названием вашего поля. Он содержит тире: -

Javascript интерпретирует это как:

return doc.time - data
return doc.time minus data

Вы можете изменить свою собственность (на что-то вроде time_data), или вы можете создать свой вид следующим образом:

function (doc) {
    if (doc['time-data']) {
        emit(doc['time-data'], 1);
    }
}
Другие вопросы по тегам