我正在尝试使用couchbasenpm包运行一些N1QL查询。这是我在运行代码之前采取的步骤:
beer-sample存储桶cbq-engine像这样启用:
./cbq-engine -datastore=http://localhost:8091此时,我已经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) 我们在使用 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 子句!
首先,如果这个问题听起来太愚蠢,我很抱歉.但我最近在学习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) 我希望使用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对象列表的方法,但是我看不到任何我称之为执行工作的存储桶方法.
有人知道这样做的方法吗?
有这样的嵌套文档时:
{
"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) 当我使用以下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作为数字而不是作为存储桶名称,是否有一种简单的方法来重命名它?
我可以使用视图查询文档,但切换到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) 我是 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] …
当我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) 从对象数组中选择值的正确方法是什么?
想要检索不同的评论列表。
[
"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 ×10
sql++ ×10
java ×2
nosql ×2
c# ×1
document ×1
f# ×1
javascript ×1
node.js ×1
spring-boot ×1