Couchdb посмотреть фильтрацию по дате - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть простой документ с именем Структура заказа с полями id, name, userId и timeScheduled.

Что я хотел бы сделать, это создать представление, где я могу найти document.id для тех, кто userIdэто некоторое значение и timeScheduledis после указанной даты.

Мой взгляд:

"by_users_after_time": {
      "map": "function(doc) { if (doc.userId && doc.timeScheduled) {
emit([doc.timeScheduled, doc.userId], doc._id); }}"
  }

Если я сделаю

localhost:5984/orders/_design/Order/_view/by_users_after_time?startKey="[2012-01-01T11:40:52.280Z,f98ba9a518650a6c15c566fc6f00c157]"

, я получу каждый результат обратно.Есть ли способ получить доступ к ключу [1], чтобы сделать if doc.userId == key [1] или что-то в том же духе и просто выдать его вовремя?

Это будет SQL-эквивалент

select id from Order where userId =
"f98ba9a518650a6c15c566fc6f00c157" and timeScheduled >
2012-01-01T11:40:52.280Z;

Я провел несколько поисков в Google, но не могу найти хорошее руководство по работе с несколькими клавишами.Также возможно, что мой подход полностью ошибочен, поэтому любые указания будут оценены.

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

не забудьте установить endkey = ["f98ba9a518650a6c15c566fc6f00c157", {}], в противном случае вы получите данные всех пользователей> "f98ba9a518650a6c15c566fc6f00c157"

1 голос
/ 14 февраля 2012

Вам нужно только поменять ключ, потому что имя пользователя известно:

function (doc) {
  if (doc.userId && doc.timeScheduled) {
    emit([doc.userId, doc.timeScheduled], 1);
  }
}

Затем выполните запрос:

?startkey=["f98ba9a518650a6c15c566fc6f00c157","2012-01-01T11:40:52.280Z"]

ПРИМЕЧАНИЯ:

  • theпараметр запроса - startkey, а не startKey;
  • значение startkey является массивом, а не строкой.Затем двойные кавычки идут вокруг значений имени пользователя и даты, а не вокруг массива.
  • Я выделяю 1 в качестве значения вместо doc._id, чтобы сэкономить место на диске.У каждой строки результата есть поле id с doc._id, тогда нет необходимости повторять его.
0 голосов
/ 09 марта 2012

Ответ на самом деле пришел из списка рассылки couchdb:

По сути, Date.parse () не нравится +0000 на отметках времени. От делая подстроку и удаляя +0000, все работало.

Для записи,

document.write(new Date("2012-02-13T16:18:19.565+0000")); //Outputs Invalid
Date
document.write(Date.parse("2012-02-13T16:18:19.565+0000")); //Outputs NaN

Но если вы удалите +0000, обе строки кода будут работать идеально.

...