使用日期字段在Couchbase中编写复杂查询?

时间:2017-07-03 08:10:16

标签: java couchbase n1ql

我在db中并不多,这里的挑战是N1QL查询。我的文档如下所示

{
  "timestamp": "2017-06-30 18:40:12",
  "title": "http://www.sample.com",
  "clicks": 0,
  "keyword": "7s9HHp",
  "expiryDays": 90,
  "user": "admin",
  "url": "http://www.sample.com",
  "ip": "192.12.35.40"
}

现在我想要选择timestamp和当前时间戳差异大于或等于expiryDays的所有文档。简而言之,选择所有人(当前时间戳 - 2017-06-30 18:40:12)> = 90天。

我检查了Couchbase portal他们支持日期差异,如下所示

SELECT DATE_DIFF_STR('2016-05-18T03:59:00Z', '2016-05-15 03:59:00Z', 'day') as add_3_days;

但是不知道如何在java中做。我的查询可能类似于下面的

Statement statement = Select.select("*").from("My_Bucket").where("Don't know what to supply here");

1 个答案:

答案 0 :(得分:0)

请参考https://developer.couchbase.com/documentation/server/4.6/sdk/java/n1ql-queries-with-sdk.html将DSL与N1QL结合使用。总之,您有两种方式:

  1. 将SELECT查询字符串传递给query()方法。

  2. 或者,如您所述,在DSL查询之后使用日期函数(请参阅API reference com.couchbase.client.java.query.dsl.functions)。事实上,您可以将投影字段指定为select()方法而不是*