2017-08-04 79 views
1

我试图对我创建的PouchDB索引执行$ gte查询。查询不会出错,但当应该有与该子句匹配的文档时返回空数组。这个想法是让所有的文档都有最近30天的时间戳。存储该值的属性不在顶层,它属于meta属性的一部分。例如。Pouchdb-从过去30天查找文档

{ 
    _id: "76e7f205-b8c3-4cc6-abfb-77c98ca3a0d4", 
    _rev: "1-47f49534aa364f5c654b9574fa085005", 
    ... 
    meta: { 
     created: 1501841768486 
     createdBy: "[email protected]" 
    } 
} 

创建我的指数成功地利用了以下内容:

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); 
}); 

我试图查询子属性既不工作都语法风格:

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

我然后使用查询它。该查询实际上不会失败或导致任何错误 - 当我知道有文档应该匹配该查询时,它只返回一个空数组。

回答

1

您需要将thirtyDaysAgo换成​​,因为它是一个字符串,而您创建的日期是一个数字。类型差异对pouchdb-find很重要,因为它使用与couchdb相同的基础索引标准,并且它们的类型基于collation order

+0

我不敢相信我没有发现!谢谢 – Mark