我需要做一个消息应用程序,我想使用couchdb。
消息文档就像这样:
message = {
'from':'uuid1',
'to':'uuid2',
'message':'asd asd asd',
'date':1342643405.84
}
我需要过滤以获取针对用户的消息并按日期进行分页。
所以过滤我创建了一个视图...... emit([doc.from,doc.to],doc)......
为了更好地分页而不仅仅是跟踪密钥,我想每天,每周或每月创建一个新的数据库来存储消息。数据库名称可以是这样的(这是白天):
...
message_2012/07/01
message_2012/07/02
message_2012/07/03
...
这样我只能点击数据库的一部分,但我不知道这是好还是坏。
答案 0 :(得分:1)
CouchDB构建索引(使用B-Tree)的方式意味着只要你适当地创建你的视图,你就不必担心你担心的事情。
您需要使用日期作为要发出的复合键中的第一个键来创建视图。并且您需要一个单独的视图,每个类型的日期,您想要页面/分组/排序。因此,如果您希望能够选择每天,每周,每月和每年的文档,那么您将需要四个视图 - 每个视图对应不同类型的日期。
请务必将您的日期转换为可以按字母顺序排序/搜索/分组的格式。例如,您的月度视图可能是:
function(d) {
if( d.from && d.to && d.date ) {
var date = new Date( d.date ),
month = ('0' + (1 + date.getMonth())).slice(-2),
year = date.getYear();
date_string = date.getFullYear() + '-' + month;
emit( [ date_string, d.from, d.to ] );
}
}