标签: sql++

使用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
查看次数

使用N1QL访问Couchbase中的内部元素

首先,如果这个问题听起来太愚蠢,我很抱歉.但我最近在学习N1QL并需要一些输出作为我的陈述.我的存储桶名称是MultiSiteResponseTime,我试图通过执行" 从MultiSiteResponseTime;中选择HourResponsetime.Hour "获得所有小时的结果.但我没有得到任何结果.根据我的理解,如果你想访问内部元素,那么你必须使用它像HourResponsetime.Hour,但我不知道我错在哪里.此外,如果您可以帮我获取特定键的结果,例如我想知道第1小时响应时间的结果.

{
  "Para": "ResponseTime",
  "Date": "18-04-2016",
  "Qantas": {
    "HourResponsetime": [
      {
        "Hour": 0,
        "ResponseTime": 8
      },
      {
        "Hour": 1,
        "ResponseTime": 9
      },
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

couchbase sql++

4
推荐指数
1
解决办法
239
查看次数

Couchbase Java SDK:包含文档ID的N1QL查询

我希望使用Java客户端SDK在我的Couchbase数据库上执行查询,该客户端SDK将返回包含每个结果的文档ID的结果列表.目前我正在使用:

Statement stat = select("*").from(i("myBucket"))
                 .where(x(fieldIwantToGet).eq(s(valueIwantToGet)));

N1qlQueryResult result = bucket.query(stat);
Run Code Online (Sandbox Code Playgroud)

但是,N1qlQueryResult似乎只返回没有任何关联元数据的JsonObjects列表.看看文档,似乎我想要一个返回Document对象列表的方法,但是我看不到任何我称之为执行工作的存储桶方法.

有人知道这样做的方法吗?

java couchbase sql++

4
推荐指数
1
解决办法
355
查看次数

Couchbase N1QL:嵌套文档的更新

有这样的嵌套文档时:

{
"blog": "testblog1",
"user_id": 41,
"comments": [
    {
        "comment": "testcomment1",
        "user_id": 883
    },
    {
        "comment": "testcomment2",
        "user_id": 790
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

可以使用N1QL进行更新操作以向子文档添加额外的字段吗?

我想"ranking" : "top comment"使用注释testcomment2 将该字段添加到子文档:

{
"blog": "testblog1",
"user_id": 41,
"comments": [
    {
        "comment": "testcomment1",
        "user_id": 883
    },
    {
        "comment": "testcomment2",
        "user_id": 790,
        "ranking" : "top comment"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

站点注意:以下语句将向集合博客上的根文档添加一个字段:

UPDATE Blog SET rank = "top blog" WHERE blog = "testblog1";
Run Code Online (Sandbox Code Playgroud)

document nosql couchbase sql++

3
推荐指数
1
解决办法
2779
查看次数

如何在couchbase中重命名一个桶?

当我使用以下N1QL语句时,我有一个桶名0001,我得到一个"5000"语法错误:

cbq> Select * from 0001;
{
    "requestID": "f2b70856-f80c-4c89-ab37-740e82d119b5",
    "errors": [
        {
            "code": 5000,
            "msg": "syntax error"
        }
    ],
    "status": "fatal",
    "metrics": {
        "elapsedTime": "349.733us",
        "executionTime": "204.442us",
        "resultCount": 0,
        "resultSize": 0,
        "errorCount": 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它需要0001作为数字而不是作为存储桶名称,是否有一种简单的方法来重命名它?

couchbase sql++

3
推荐指数
1
解决办法
1383
查看次数

使用N1QL查询Couchbase

我可以使用视图查询文档,但切换到N1QL会将Success属性设置为false.什么地方出了错 ?

    let cluster = new Cluster()
    let bucket = cluster.OpenBucket("mydoc","")
    let query = """SELECT * FROM mydoc where SET = 'SET24MM2SCLV01'"""
    let result = bucket.Query(query)
    Console.WriteLine(result.Success) //would give false
Run Code Online (Sandbox Code Playgroud)

f# couchbase sql++

3
推荐指数
1
解决办法
1348
查看次数

Couchbase N1QL 结果根据 SELECT 语法改变形状

我是 Couchbase 的新手,遇到了一种让我非常困扰的行为。假设我已经在 C# 中定义了这个类:

public class Thing
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我将它存储在 Couchbase 中名为 ThingBucket 的存储桶中。现在,如果我进入 Couchbase 查询工作台并输入:

SELECT Property1, Property2 FROM ThingBucket
Run Code Online (Sandbox Code Playgroud)

我得到的是一个 JSON 对象,它将直接反序列化为一个 Thing 数组:

[
    {
        "Property1": "Value",
        "Property2": "Value"
    }
]
Run Code Online (Sandbox Code Playgroud)

这很好,因为我不需要做任何特别的事情就可以将它反序列化为事物。Couchbase C# 驱动程序调用 Json.NET 进行反序列化,并且它可以正常工作。

但是,如果我输入:

SELECT * FROM ThingBucket
Run Code Online (Sandbox Code Playgroud)

我没有得到一系列的东西。我得到了完全不同的东西:

[
    {
      "ThingBucket": {
          "Property1": "Value",
          "Property2": "Value"
      }
    }
]
Run Code Online (Sandbox Code Playgroud)

现在,我的 C# 代码中根本不存在一组形状,而不是 Thing 数组。它是一个对象数组,其中每个对象都有一个作为 Thing 的属性。为了让它反序列化到 Thing,我必须用 [JsonProperty] …

c# couchbase sql++

3
推荐指数
1
解决办法
307
查看次数

为什么 Java N1QL 中的 ORDER BY 无法按预期工作

当我SELECT * FROM projects ORDER BY createdAt desc在 Couchbase Web UI 中运行此查询时,结果按原样排序,但不是在 Java 中。

Java代码

@Override
    public List<Project> getAllProjects(String requestedOrder, Integer page, Integer pageOffset) {
        String statement = "SELECT projects.* FROM projects ORDER BY $requestedOrder DESC OFFSET $offset LIMIT $pageOffset";
        QueryOptions queryOptions = queryOptions().parameters(
                JsonObject.create().put("offset", (page - 1) * pageOffset)
                        .put("pageOffset", pageOffset)
                        .put("requestedOrder", requestedOrder));
        QueryResult queryResult = couchbaseCluster.query(statement, queryOptions);
        return queryResult.rowsAs(Project.class);
    }
Run Code Online (Sandbox Code Playgroud)

网页界面结果

[
  {
    "projects": {
      "createdAt": 1603804921950,
      "name": "Third Project",
      ...
    }
  },
  {
    "projects": { …
Run Code Online (Sandbox Code Playgroud)

java couchbase spring-boot spring-data-couchbase sql++

3
推荐指数
1
解决办法
140
查看次数

Couchbase N1QL 查询从对象数组中选择值

从对象数组中选择值的正确方法是什么?

想要检索不同的评论列表。

[
  "comment 1",
  "comment 2",
  "comment 3",
  "comment 4"
]
Run Code Online (Sandbox Code Playgroud)

当前 N1QL 查询

SELECT links[*].comment FROM `my-db`
WHERE type = "links" AND ANY l IN links SATISFIES l.comment IS NOT MISSING END
Run Code Online (Sandbox Code Playgroud)

结果

[
  {
    "comment": [
      "comment 1"
    ]
  },
  {
    "comment": [
      "comment 1",
      "comment 2"
    ]
  },
  {
    "comment": [
      "comment 3",
      "comment 4"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

给定一系列包含注释字段的文档:

{
  "type": "links",
  "links": [
    {
      "comment": "comment 1"
    }
  ]
}

{
  "type": "links",
  "links": [ …
Run Code Online (Sandbox Code Playgroud)

couchbase sql++

3
推荐指数
1
解决办法
3884
查看次数