Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Couchbase和Scala中筛选日期_Scala_Indexing_Couchbase - Fatal编程技术网

如何在Couchbase和Scala中筛选日期

如何在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获取文档的方法

我有一个简单的json:

{
 "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来检索它?