我在CloudantDB中存储了以下对象。
SystemLog:
{
"logContext":"ARTLogging",
"logTime":2016-05-04T22:33:02Z,
"logReference":"CloudantARTManager",
"log":"Hello world. Test Message",
"status":"Success"
}
cloudantdb具有以下索引:
{
"name":"SysLogIdx1",
"ddoc":"SysLogIdx1",
"index":{"fields":
[
{"logContext":"asc"},
{"logTime":"asc"},
{"logReference":"asc"}
]
}
}
我正尝试使用过滤器在2分钟范围内检索这些日志,如下所示
"selector": {
"logContext": "ARTLogging",
"logTime": {"$gt": "2016-05-04T22:32:02Z"},
"logTime": {"$lt": "2016-05-04T22:34:02Z"},
"logReference": "CloudantARTManager"
}
我也试过这个
"selector":
{"logContext": "ARTLogging",
"logTime": {"$gt": "2016-05-04T22:32:02Z", "$lt": "2016-05-04T22:34:02Z"},
"logReference": "CloudantARTManager"
}
db.find没有选择任何记录。但是,如果我删除logTime过滤器,我正确地获取记录。我究竟做错了什么。
由于 马杜
答案 0 :(得分:0)
看起来您无法在日期字段上执行范围。所以我在SystemLog中创建了另一个字段,如下所示:
long logLongTime = logTime.getTime(); // here logTime is a java.util.Date.
然后我添加了一个索引字段,如下所示:
db.createIndex("SysLogIdx2", "SysLogIdx2", null, new IndexField[]{
new IndexField("logContext",SortOrder.asc),
new IndexField("logLongTime",SortOrder.asc),
new IndexField("logReference",SortOrder.asc)});
接下来,我更新了我的选择器字符串,如下所示:
"selector":
{"logContext": "ARTLogging",
"logLongTime": {"$gte": 1462569436000, "$lte": 1462569556000},
"logReference": "CloudantARTManager"
}
然后db.find检索到正确的记录。
由于 马杜