1

我正在尝试对我创建的 PouchDB 索引执行 $gte 查询。当应该有与子句匹配的文档时,查询不会出错,但会返回一个空数组。这个想法是获取所有具有过去 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);
});

我已经尝试了两种语法样式来查询子属性,但都不起作用。查询实际上并没有失败或导致任何错误 - 当我知道有应该匹配该查询的文档时,它只是返回一个空数组。

4

1 回答 1

2

您需要换行thirtyDaysAgoNumber()因为它是一个字符串,而您创建的日期是一个数字。类型差异对 pouchdb-find 很重要,因为它使用与 couchdb 相同的底层索引标准,并且这些具有基于类型的排序规则

于 2017-08-06T18:02:45.267 回答