Pouchdb-найти документы за последние 30 дней

Я пытаюсь выполнить запрос $gte для созданного мной индекса PouchDB. Запрос не содержит ошибок, но возвращает пустой массив, когда должны быть документы, соответствующие предложению. Идея состоит в том, чтобы получить все документы с метками времени за последние 30 дней. Свойство, которое хранит это значение, находится не на верхнем уровне, оно является частью meta имущество. например.

{
    _id: "76e7f205-b8c3-4cc6-abfb-77c98ca3a0d4",
    _rev: "1-47f49534aa364f5c654b9574fa085005",
    ...
    meta: {
        created: 1501841768486
        createdBy: "user@example.com"
    }
}

Я успешно создал свой индекс, используя следующее:

recordingsDB.createIndex({
    name: 'recent',
    ddoc: 'recent',
    index: {
        fields: ['meta.created']
    }
});

Затем я запрашиваю его, используя:

let thirtyDaysAgo = moment(Date.now()).subtract(30, 'days').format('x');

//selector: { 'meta.created': { $gte: thirtyDaysAgo } },

return recordingsDB.find({
    selector: { meta: { created: { $gte: thirtyDaysAgo } } },
    sort: [{'meta.created': 'desc'}],
    use_index: 'recent'
}).catch(function (err) {
    console.log(err);
});

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

1 ответ

Решение

Вам нужно будет обернуть thirtyDaysAgo в Number() как это строка, в то время как ваша дата создания является числом. Разница в типах важна для pouchdb-find, поскольку она использует тот же базовый стандарт индекса, что и couchdb, и у них есть порядок сортировки на основе типов.

Другие вопросы по тегам