标签: sql++

Couchbase - 我应该何时使用N1QL vs Views?

我正在学习Couchbase,现在是3.x版

我的疑问是,我何时应该使用N1QL查询与View查询?

而且,它们之间是否存在性能差异?


注意:我有一个情况:

一个有两个文档类型为我的旅行应用程序:路线城市

一个路由文档保存有关行驶路线的阵列信息 IDS是它的一部分,然后另一文档保存城市的信息(每个城市有自己的文档).例:

//Bucket : "Traveling App"

{
  "type" : "route"
  "name" : "The Great Adventure",
  "cities" : ["234", "h4345", "h42da"]
}

{
  "type" : "city",
  "name" : "Little Town",
  "UID"  : "234"
}
Run Code Online (Sandbox Code Playgroud)

当我查询某个旅行路线时,我应该进行N1QL查询还是查看查询?

因为我必须首先打开Route doc,获取cities数组而不是获取每个City doc.

我认为这种架构最好,因为有些路线可能只有很少的城市而其他路线可能有很多城市.

couchbase couchbase-view sql++

10
推荐指数
1
解决办法
2443
查看次数

使用参数化IN子句时,N1QL查询超时

使用Couchbase服务器4.1.0(和4.5),Java SDK 2.2.8(也尝试使用2.2.7,2.3.1和2.3.3),我有一个利用二级索引的查询,当我运行我的代码时它运行正常本地甚至通过AWS服务器上的CBQ(CBQ大约需要3毫秒).但是,当在AWS上运行我的应用程序时,我得到一个TimeOutException,它只有一个查询超时,其他查询不是.详情见下文.

值得注意的是我的Couchbase设置有3个桶.

示例文档:

"bucketName": {
    "userName": "User_A",
    "MessageContent": "This is a message",
    "docType": "msg",
    "ParentMsgId": "1234",
    "MsgType": "test",
    "expireTimestamp": 1454975772613,
    "publishTimestamp": 1455322362028,
    "id": "145826845",
    "urls": [],
    "subject": "this is a subject",
    "type": 1,
    "GroupId": "Group_1"
}
Run Code Online (Sandbox Code Playgroud)

二级指数:

CREATE INDEX `indexName` ON `bucketName`(`ParentMsgId`,`docType`,`publishTimestamp`) USING GSI
Run Code Online (Sandbox Code Playgroud)

从中提取的示例查询 N1qlQuery#n1ql()

{"statement":
"select count(*) as msgCount from bucketName 
where ParentMsgId is not missing and docType = 'msg' 
and ParentMsgId IN $parentId 
and publishTimestamp between $startTime and $endTime
","$endTime":1470726861816,
  "$startTime":1470640461816,
  "$parenIds":["fa11845b-9ea5-4778-95fe-e7206843c69b"]
} …
Run Code Online (Sandbox Code Playgroud)

java indexing couchbase sql++

8
推荐指数
1
解决办法
578
查看次数

N1ql - > IN运算符不适用于其他条件

当仅使用IN运算符时,以下查询正常工作
SELECT META().id FROM bucket_name WHERE description IN ['Item1','Item2']

但是,当我触发此查询时,它会给我一个空白的结果
SELECT META().id FROM bucket_name WHERE id = 123 AND description IN ['Item1','Item2']

我做错了什么或其他人遇到过同样的问题?

node.js couchbase sql++

6
推荐指数
1
解决办法
2554
查看次数

Couchbase N1QL:如何使用SELECT获取包含ID和CAS的完整文档

我正在使用Couchbase 4.0 beta和java-client 2.1.3.

Bucket.get(id)收益JsonDocument从中我能得到id并且cas还有内容.现在我想使用查询二级索引N1QL (select *).但是,QueryResult只返回JsonObjects的行,它们只是文档内容.无论如何我还能获得元数据(idcas)吗?

couchbase sql++

6
推荐指数
1
解决办法
3508
查看次数

Couchbase 4010错误

我一直在测试Couchbase 5并创建了一个名为fp-conversion-data其中包含一些JSON数据的存储桶.我一直在尝试运行一些简单的查询,例如:

SELECT * FROM fp-conversion-data limit 5;
Run Code Online (Sandbox Code Playgroud)

我没有得到预期的结果,而是一直收到这个错误:

[
  {
    "code": 4010,
    "msg": "FROM expression term must have a name or alias",
    "query_from_user": "SELECT * FROM fp-conversion-data limit 5;"
  }
]
Run Code Online (Sandbox Code Playgroud)

couchbase sql++

6
推荐指数
1
解决办法
1457
查看次数

Couchbase N1QL 子查询连接问题

SELECT (SELECT RAW subcomments 
FROM comments.subcomments AS subcomments
JOIN users ON subcomments.userId = users.id 
ORDER BY subcomments.createdDate DESC) as subcomments,
ARRAY_COUNT(comments.subcomments) as subcommentCount 
FROM comments where comments.id = "f4f0f481-f0d6-4edf-8a0c-494651becdf2" and projectId= "1"
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此查询时,收到以下错误:

[
  {
    "code": 5370,
    "msg": "Unable to run subquery - cause: FROM in correlated subquery must have USE KEYS clause: FROM users.",
    "query": "SELECT (SELECT RAW subcomments \nFROM (Select * from comments.subcomments as sbcm\nJOIN users ON sbcm.userId = users.id ) as a\nORDER BY subcomments.createdDate DESC) as subcomments,\nARRAY_COUNT(comments.subcomments) …
Run Code Online (Sandbox Code Playgroud)

couchbase sql++

6
推荐指数
1
解决办法
107
查看次数

go couchbase (gocb) 错误 - 不明确的超时或明确的超时

我刚刚开始使用 Go 中的 Couchbase,使用库 gocb。

就像尝试向我的服务器查询特定 ID 并获取结果的概念证明一样。下面是修改后的代码示例。

cOpts := gocb.ClusterOptions{
        Authenticator: gocb.PasswordAuthenticator{
            Username: "user",
            Password: "pw",
        },
    }

    cluster, err := gocb.Connect("couchbase://my.dev.server.net/", cOpts)
    if err != nil {
        panic(err)
    }

    qOpts := gocb.QueryOptions{}

    // create query
    queryStr := "SELECT * FROM myBucket WHERE id = '123456789'"

    rows, err := cluster.Query(queryStr, &qOpts)
    if err != nil {
        panic(err)
    }

    fmt.Printf("rows: %v\n", rows)

    for rows.Next() {
        var intfc interface{}
        err = rows.Row(&intfc)
        if err != nil {
            panic(err)
        }
        fmt.Printf("interface result: …
Run Code Online (Sandbox Code Playgroud)

go couchbase sql++ gocb

6
推荐指数
1
解决办法
1902
查看次数

在Couchbase或N1QL中,如何检查数组中的值是否匹配

在沙发基地,我有以下文件结构......

{
    name: "bob",
    permissions: [
        2,
        4,
        6
    ]
}
Run Code Online (Sandbox Code Playgroud)

我需要能够创建一个视图或N1QL查询,它将检查"bob"的权限是否包含在给定数组中.

例如,我有一个包含内容的数组

[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我需要返回"bob"文档,因为我的数组包含2,4,6,所以"bob"也是如此

如果我的数组包含1,3,4,5,6"鲍勃"应该没有被选中,因为我的数组中不包含"2"

基本上我想匹配其权限条目都包含在我的数组中的任何文档.

解决方案可以是视图或N1QL查询.

views couchbase sql++

5
推荐指数
1
解决办法
2179
查看次数

使用node.js启用Couchbase N1QL引擎

我正在尝试使用couchbasenpm包运行一些N1QL查询。这是我在运行代码之前采取的步骤:

  1. 在OSX上安装并执行Couchbase
  2. 导航到:8091并设置凭据和beer-sample存储桶
  3. 将N1QL DP4下载到一个文件夹
  4. cbq-engine像这样启用: ./cbq-engine -datastore=http://localhost:8091
  5. 根据文档创建主索引

此时,我已经localhost:8091(主要的Couchbase集群)和localhost:8093(DP4引擎)都已上线。

这是我从node.js客户端使用的代码,以尝试运行简单的N1QL查询:

var colors = require('colors'); // for console.log
var couchbase = require('couchbase');
var N1qlQuery = require('couchbase').N1qlQuery; // get query object
var myCluster = new couchbase.Cluster('couchbase://localhost:8091'); // connect to live local cluster
var myBucket = myCluster.openBucket(); // open bucket
myBucket.enableN1ql(['http://localhost:8093/']); // enable n1ql as per documentation (http://docs.couchbase.com/developer/node-2.0/n1ql-queries.html) - I also tried :8091, same result
var query = N1qlQuery.fromString('SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

javascript nosql node.js couchbase sql++

5
推荐指数
1
解决办法
1568
查看次数

Couchbase 无可用索引

我们在使用 couchbase N1QL 查询时遇到问题。

我们有一个索引定义如下:

CREATE INDEX `AppUser_SubjectId3` ON `Portal`(`SubjectId`) WHERE ((meta(self).`id`) like `AppUser%`)
Run Code Online (Sandbox Code Playgroud)

然后我们尝试运行以下查询:

SELECT RAW `Extent1` 
FROM `Portal` as `Extent1` 
USE INDEX (`AppUser_SubjectId3` USING GSI) 
WHERE (`Extent1`.`SubjectId` = 'c8ea08231c3a985a06342355b87d6e2d6290a985d5c3592e5b8e5e5f14608a08')
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

键空间门户上没有与您的查询匹配的索引。
使用 CREATE INDEX 或 CREATE PRIMARY INDEX 创建索引,
或检查您的预期索引是否在线。

我们已经确认了明显的索引在线。唯一值得注意的是 Bucket 目前实际上并不包含任何文档,但我们不希望在这种情况下出现此错误,只是没有返回任何内容。

有任何想法吗?

编辑:

我创建了另一个没有 WHERE 子句的索引,它不再返回错误。

CREATE INDEX `AppUser_SubjectId4` ON `Portal`(`SubjectId`)
Run Code Online (Sandbox Code Playgroud)

唯一的问题是需要 WHERE 子句!

couchbase sql++

5
推荐指数
1
解决办法
4389
查看次数

标签 统计

couchbase ×10

sql++ ×10

node.js ×2

couchbase-view ×1

go ×1

gocb ×1

indexing ×1

java ×1

javascript ×1

nosql ×1

views ×1