我在使用CouchDB设计时遇到了一个问题,根据文档的created
属性,该设计应该返回超过5秒的记录。文档会不断地添加到mydb
数据库中。
由于某些原因,创建日期小于当前日期(5秒)的文档不会返回。
这是我添加文档的方式:
...
timestamp==$(echo $(( $(date +%s) * 1000 )))
...
curl -X POST -H "Content-Type: application/json" -d "{\"created\": ${timestamp}}" http://localhost:5984/mydb -u "admin:YOURPASSWORD"
如何使用视图查询:
curl -X GET -u "admin:YOURPASSWORD" "http://localhost:5984/mydb/_design/nonce/_view/older_than?limit=100"
如果只添加了几个文档,那么事情就可以正常工作,但是反复这样做不会返回预期的记录数量。
你觉得我哪里做错了吗?
下面是专门创建的示例项目,以了解我在GitHub上做错了什么(上面的示例自动化和相应的GO方法,应该删除返回的记录:
https://github.com/igorrendulic/couchdb-test
1条答案
按热度按时间wh6knrhe1#
emit
函数是在创建或更新文档时 * 而不是在查询时 * 在索引文档时调用的,理解这一点很关键。emit函数
从文档的
created
字段中减去5秒(特别是假设该字段存在)并对值进行索引,这似乎没有什么用处。如果解决方案是返回
created
字段值比当前时间短5秒或更多的最新文档,那么这个简单的emit
就足够了(并且可以为其他查询提供更多的实用程序)。CouchDB的排序规范导致索引开始处的数值较小,因此查询需要反转排序并提供所需的时间窗口,例如本例中的当前时间小于5秒:
该查询将返回最多100个
created
小于或等于epoch_time_ms
的文档,最新的文档在结果集中排在第一位。我必须补充一点,存储
_rev
似乎很模糊,因为可以从结果文档中获得这些信息。