0

我正在开发一个基于用户选择日期显示事件的 Android 应用程序。我正在使用 Couchdb 和 Ektorp。我不知道如何定义方法 findByMes 的视图,其中包含我应该从日历中读取的变量日期,而不是“2013-10-01”...这是我正在工作的类 EventDAO 的代码在。

如果有人可以帮助我,我将不胜感激!!

public class EventDAO extends CouchDbRepositorySupport<EventVO> {

        public EventDAO(CouchDbConnector db) {
                super(EventVO.class, db);
                initStandardDesignDocument();
        }

        @GenerateView @Override
        public List<EventVO> getAll() {
                ViewQuery q = createQuery("all")
                                .includeDocs(true);
                return db.queryView(q, EventVO.class);
        }

        public List<EventVO> findByDate(String Date) {
            List<EventVO> event = queryView("by_date", Date);
            return  event;
        }

       @View( name = "by_mes", map ="function(doc) {if (doc.type == 'Event' && doc.date >= '2013-10-01' && doc.date <= '2013-10-31'  ) { emit(doc._id,doc)}}")
        public List<EventVO> findBymes() {
           ViewQuery q = createQuery("by_mes")
                   .includeDocs(true);
           return db.queryView(q, EventVO.class);

        }
}
4

1 回答 1

0

视图中不可能有动态的东西,因为视图只构建一次并且仅针对更改的文档进行增量更新。您应该将日期位从 map 函数移动到键中:

function(doc) {
    if (doc.type == 'Event'){ 
      var key = doc.date.split('-').map(function(i){
          return parseInt(i, 10);
      }); // .map part is optional, I prefer to have date-time arrays with int values
      key.push(doc._id);
      emit(key, doc);
    }
}

并在查询参数中使用它们(日期位):

http://localhost:5984/db/_design/ddoc/_view/by_mes?startkey=[2013,10,1]&endkey=[2013,10,31, {}]

这会给你一个不同的输出(我省略了valuedoc 对象):

{
    "offset": 0,
    "rows": [
        {
            "id": "foo",
            "key": [2010, 10, 1, "foo"],
            "value": {}
        },
        {
            "id": "bar",
            "key": [2010, 10, 11, "bar"],
            "value": {}
        },
        {
            "id": "baz",
            "key": [2010, 10, 31, "baz"],
            "value": {}
        }
    ],
    "total_rows": 3
}

但能够即时更改请求的日期范围。

于 2013-10-25T12:44:37.397 回答