我想将我的数据排序为本地cloudant查询中的par desc date。 我在我的数据库文档中有insert_ts。 我的简单查询代码是: -
public List<BasicDocumentMAP> allTasksWithAllArg(Map<String, Object> query, int skip, int limit, List<String> fields, List<Map<String, String>> sortDocument) {
int nDocs = this.sunDatastore.getDocumentCount();
QueryResult all = this.im.find(query, skip, limit, fields, sortDocument);
List<BasicDocumentMAP> arrayListBasicDocumentMAP = new ArrayList<>();
// Filter all documents down to those of type Task.
for (DocumentRevision rev : all) {
}}
请帮我按日期排序数据。谢谢
答案 0 :(得分:0)
试试这段代码:
SQL查询:
Select _id , _rev , insert_ts , title from table
where year=2010 order by insert_ts
Cloudant查询:
{
"selector": {
"year": {
"$gt": 2010
}
},
"fields": ["_id", "_rev", "insert_ts", "title"], //
"sort": [{"insert_ts": "asc"}]
}
答案 1 :(得分:0)
更新:原始答案(在底部)显示了如何按年排序(OP询问如何获得年份,因此我认为这是他们想要排序的方式)。这是按日期排序的方法:
将insert_ts
字段更改为日期,或添加一个新日期字段,例如:
Date insertTsDate = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy-hh-mm-ss-SS");
try {
insertTsDate = dateFormat.parse(insert_ts);
}
catch (Exception e) {
// handle exception
}
然后在您的文档中添加一个名为insert_ts_date
的新字段(或任何您想要调用的字段),将其设置为上面的insertTsDate
变量,并按如此排序:
List<Map<String, String>> sortDocument = new ArrayList<Map<String, String>>();
Map<String, String> sortByInsertTsDate = new HashMap<String, String>();
sortByInsertTsDate.put("insert_ts_date", "asc");
sortDocument.add(sortByInsertTsDate);
原始答案:
我认为您必须在文档中明确添加年份属性。如果您有年份,那么只需将其添加到您的文档中即可。如果您需要从字符串中解析它,您可以使用正则表达式或日期/日历类来解析日期:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy-hh-mm-ss-SS");
try {
Date date = dateFormat.parse(insert_ts);
Calendar c = Calendar.getInstance();
c.setTime(date);
int year = c.get(Calendar.YEAR);
}
catch (Exception e) {
// handle exception
}
然后按如下方式发出您的查询:
List<Map<String, String>> sortDocument = new ArrayList<Map<String, String>>();
Map<String, String> sortByYear = new HashMap<String, String>();
sortByYear.put("year", "asc");
sortDocument.add(sortByYear);