如何在Couchbase和Scala中筛选日期
我有一个简单的json:如何在Couchbase和Scala中筛选日期,scala,indexing,couchbase,Scala,Indexing,Couchbase,我有一个简单的json: { "id": 1, "name": "John", "login": "2019-02-13" } 这类文档存储在Couchbase中,但现在我想以其他方式创建索引或列表,这样可以过滤登录时间超过30天的所有文档。我应该如何在Couchbase中创建它并在Scala中获得它 目前,我从数据库中获取所有文档并在API中过滤它们,但我认为这不是一个很好的方法。我想在数据库端进行过滤,只检索登录时间超过30天的文档 现在,在Scala中,我只有通过id获取文档的方法
{
"id": 1,
"name": "John",
"login": "2019-02-13"
}
这类文档存储在Couchbase中,但现在我想以其他方式创建索引或列表,这样可以过滤登录时间超过30天的所有文档。我应该如何在Couchbase中创建它并在Scala中获得它
目前,我从数据库中获取所有文档并在API中过滤它们,但我认为这不是一个很好的方法。我想在数据库端进行过滤,只检索登录时间超过30天的文档
现在,在Scala中,我只有通过id获取文档的方法:
bucket.get(id, classOf[RawJsonDocument])
我建议看一看N1QL,它只是JSON的SQL。下面是一个例子:
SELECT u.*
FROM mybucket u
WHERE DATE_DIFF_STR(NOW_STR(), login, 'day') > 30;
您还需要一个索引,例如:
CREATE INDEX ix_login_date ON mybucket (login);
虽然我不能保证这是最好的索引,但它至少会让你开始
我使用了DATE_DIFF_STR和NOW_STR,但是还有其他方法来处理日期。在文档中签出。由于您是N1QL新手,我建议您查看一下。我建议您看看N1QL,它只是SQL for JSON。下面是一个例子:
SELECT u.*
FROM mybucket u
WHERE DATE_DIFF_STR(NOW_STR(), login, 'day') > 30;
您还需要一个索引,例如:
CREATE INDEX ix_login_date ON mybucket (login);
虽然我不能保证这是最好的索引,但它至少会让你开始
我使用了DATE_DIFF_STR和NOW_STR,但是还有其他方法来处理日期。在文档中签出。由于您是N1QL新手,我建议您查看。以下查询更有效,因为当索引键与谓词关系运算符的一侧匹配时,它可以将谓词推送到IndexScan。如果有从索引键派生的表达式,它将获取查询引擎中的所有值和筛选器
CREATE INDEX ix_login_date ON mybucket (login);
SELECT u.*
FROM mybucket AS u
WHERE u.login < DATE_ADD_STR(NOW_STR(), 'day', -30) ;
下面的查询效率更高,因为当索引键与谓词关系运算符的一侧匹配时,它可以将谓词推送到IndexScan。如果有从索引键派生的表达式,它将获取查询引擎中的所有值和筛选器
CREATE INDEX ix_login_date ON mybucket (login);
SELECT u.*
FROM mybucket AS u
WHERE u.login < DATE_ADD_STR(NOW_STR(), 'day', -30) ;
哪个版本的Couchbase?你试过N1QL吗?版本5+。不,我没有试过。它的效率高吗?它很可能比从数据库中读取每个文档并自己过滤要高。Couchbase的哪个版本?你试过N1QL吗?版本5+。不,我没有试过。它有效率吗?它很可能比从数据库中读取每个文档并自己进行筛选更有效。谢谢。我将尝试使用它,看起来比在API中过滤更有效。谢谢。我将尝试使用它,看起来比API中的过滤更有效。所以我需要在数据库上创建索引,并在代码中使用N1QL来检索它?所以我需要在数据库上创建索引,并在代码中使用N1QL来检索它?