标签: sql++

CouchBase NOSQL 宣布支持 JOIN。使用它们有什么缺点?

我一直认为 NoSQL(Cassandra、CouchDB、Couchbase、MongoDB 等)是面向文档的(NO JOIN)。典型的句子:“如果需要JOIN,请使用SQL数据库(MySQL、PostgreSQL等)”

但现在,Couchbase 宣布了支持 JOIN 的 N1QL(开发者预览版 4):

http://blog.couchbase.com/introducing-developer-preview-for-couchbase-server-4.0

网上试试:

http://query.pub.couchbase.com/tutorial/#42

所以,我很困惑。Couchbase 是第一个支持 JOIN 的 NOSQL 数据库?使用它有什么缺点吗?为什么其他NOSQL数据库(如mongodb、couchdb、cassandra等)没有实现它?

join mongodb nosql couchbase sql++

2
推荐指数
1
解决办法
693
查看次数

N1QL 使用连字符访问对象键

我在沙发上有一个以 uuid 为键的对象。

  "user": {
    "f5ada4b8-cb68-4c85-a48d-87a1217963ca": [
      {
        "user_variant_id": false,
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我想访问用户 ['f5ada4b8-cb68-4c85-a48d-87a1217963ca']。但是这种表示法在 N1QL 选择语句中不起作用。有人可以帮忙吗。提前致谢

couchbase sql++

2
推荐指数
1
解决办法
246
查看次数

N1QL:向现有的Couchbase文档中添加新对象

是否可以使用N1QL?

例如我有这个:

{
"blog": "Coffee",
"user_id": 41,
"comments": [
    {
        "comment": "cup",
        "user_id": 883
    },
    {
        "comment": "water",
        "user_id": 790
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用N1QL在注释中添加糖,以得到以下结果:{“ blog”:“ Coffee”,“ user_id”:41,“ comments”:[{“ comment”:“ cup”,“ user_id”:883}, {“ comment”:“水”,“ user_id”:790},{“ comment”:“糖”,“ user_id”:14}]}

我尝试了这个:

UPDATE
    Blog
SET
    `c.comment` = "sugar",
    `c.user_id` = 14
FOR
    c IN comments
WHERE 
    `blog` = "Coffee" 
// [{"code":3000,"msg":"syntax error - at WHERE"}
Run Code Online (Sandbox Code Playgroud)

和这个:

UPDATE 
    Blog
SET
    ("comments", { "comment": "sugar", "user_id": 14})
WHERE
    `blog` = "Coffee"
//[{"code":3000,"msg":"syntax error - at ("}
Run Code Online (Sandbox Code Playgroud)

database json nosql couchbase sql++

2
推荐指数
1
解决办法
871
查看次数

Couchbase N1QL连接查询

在Couchbase环境中需要帮助查询.

文档1和文档2都在同一个桶中.

首先,查询将使用此查询获取文档message1:

SELECT uid, message, sent_by FROM bucket USE KEYS "message1"
Run Code Online (Sandbox Code Playgroud)

其次,它需要从文档2获取用户名.如何使用上面的查询创建一个从给定文档名称获取用户名的连接语句?

概观

文档1 文档名称= message1

[
  {
    "uid": "1",
    "message": "hello",
    "sent_by": "username"
  }
]
Run Code Online (Sandbox Code Playgroud)

文档2 文档名称= user1

[
  {
    "username": "username"
  }
]
Run Code Online (Sandbox Code Playgroud)

couchbase sql++

2
推荐指数
1
解决办法
4132
查看次数

Couchbase N1QL:检索没有特定字段的文档

我在桶里有很多文件

{ prop1: value, prop2: value, prop3: value}
Run Code Online (Sandbox Code Playgroud)

但是有些文件没有prop3字段.

如何使用n1ql查询检索所有没有prop3字段的文档?

couchbase sql++

2
推荐指数
1
解决办法
509
查看次数

在java中编写基本的n1ql查询

我刚开始学习Couchbase.我正在尝试使用java sdk编写基本查询,但我无法理解如何编写它.以下是查询:

 SELECT * 
        FROM users_with_orders usr 
                JOIN orders_with_users orders 
                    ON KEYS ARRAY s.order_id FOR s IN usr.shipped_order_history END
Run Code Online (Sandbox Code Playgroud)

这是为了没有数组加入:

LetPath path = select("*,META(usr).id as _ID,META(usr).cas as _CAS).from(bucketName +" usr").join(bucketname +" orders").onKeys("usr.order_id) 
Run Code Online (Sandbox Code Playgroud)

我应该如何处理on keys数组的上述查询?

谢谢!!!!

java couchbase sql++

2
推荐指数
1
解决办法
1941
查看次数

Couchbase 5.5:为什么将 '\\' 放在 meta.id 中会使搜索更快?

Couchbase 5.5 N1Ql

我在沙箱 couchbase 数据库中有 150k 个文档,其中文档名称采用以下格式:

alpha_model::XXXXXXX::version
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时:

SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha_model::100004993::%" LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

结果计数:5。经过的时间是 1.13s

但是,当我在 '_' 之前添加一个 '\' 时,性能会大大提高

SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha\\_model::100004993::%" LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

结果计数:5。经过的时间是 8.16ms

为什么第二种方式要快 100 倍以上?下划线不好吗?是否还有其他字符我应该转义以提高性能

couchbase sql++

2
推荐指数
1
解决办法
241
查看次数

无法部署 couchbase 事件功能

我在存储桶学生记录中有一个文档“学生”,其中记录了 id。

{
  "id":"101",
  "fname": "abc",
  "lname": "xyz",
  "rank": "1",
  "scholarShip": "",
  "grade": ""
}
Run Code Online (Sandbox Code Playgroud)

我的工作是找到所有排名为 1 的学生,然后在相应的文档中更新“奖学金”和“成绩”。

我在 Couchbase 中创建了一个事件函数,如下所示

function OnUpdate(doc, meta) {
    log('docId', meta.id);
       try {
        var rankValue = SELECT rank FROM `student-records` USE KEYS ["id"];
        for (var rv of rankValue) {
            if (rv==1) {  
               UPDATE `student-records` USE KEYS ["id"] set scholarShip="100%", grade="A";
        }
     }
    } catch(e) { log(e); } 
}
Run Code Online (Sandbox Code Playgroud)

在部署这个时,我收到一个错误:

部署失败:语法错误 (7, 16) - 无法在存储桶“student-records”上执行 DML 查询

在创建函数时,我已经声明:

源存储桶 => 学生记录

元数据桶=>学生记录元数据

couchbase spring-data-couchbase sql++

2
推荐指数
1
解决办法
160
查看次数

将N1QL与文档密钥一起使用

我是相当新的couchbase,并试图找到我正在尝试创建的特定查询的答案到目前为止没有太大的成功.

我已经在使用视图或N1QL来讨论这个特殊情况并且使用N1QL解决了但是没有设法使它工作,所以也许一个视图更好.

基本上我有以下文档的文档密钥(Group_1):

Group_1
{
  "cbType": "group",
  "ID": 1,
  "Name": "Group Atlas 3",
  "StoreList": [
    2,
    4,
    6
  ]
}
Run Code Online (Sandbox Code Playgroud)

我还有"存储"文档,它们的密钥列在本文档的商店列表中.(Store_2,Store_4,Store_6并且它们的storeID值为2,4和6)我基本上想要获得列出的所有3个文档.

我所做的工作是通过以下方式获取此文档的ID:

var result = CouchbaseManager.Bucket.Get<dynamic>(couchbaseKey);
mygroup = JsonConvert.DeserializeObject<Group> (result.ToString());
Run Code Online (Sandbox Code Playgroud)

然后我可以循环遍历它的商店列表并以相同的方式获取它的所有商店,但我不需要该组中的任何其他内容,我想要的只是商店,并且希望在单个操作中执行此操作.

有谁知道如何直接对指定的文档值执行N1QL?类似的东西(这是完全虚构的非工作代码,我只是想清楚地说明我想要的东西):

SELECT*FROM mycouchbase WHERE documentkey IN Group_1.StoreList

谢谢

更新: 所以Nic的解决方案不起作用;

这是我最接近我需要的东西:

SELECT b from DataBoard c USE KEYS ["Group_X"] UNNEST c.StoreList b;

"results":[{"b":2},{"b":4},{"b":6}]
Run Code Online (Sandbox Code Playgroud)

这将返回我想要的任何给定组(Group_X)的商店的ID列表 - 我还没有找到一种方法来获取完整的商店而不仅仅是同一语句中的ID.

一旦我有了,我将发布完整的解决方案以及我在此过程中遇到的所有减速带.

couchbase couchbase-view sql++

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

如何在N1QL和Couchbase中创建索引并使用join

我在同一默认Bucket中有三个json,如下所示

我怎么能加入这三个json?

第一

"Country|1":{
  "_id": 1,
  "_type": "Country",
  "currency": "Afghani",
  "iso2": "AF",
  "name": "Afghanistan"
}
Run Code Online (Sandbox Code Playgroud)

第二

"Company|a1091aa0-b548-11e6-957e-139be07f46df": 
  {
  "_id": "a1091aa0-b548-11e6-957e-139be07f46df",
  "_type": "Company",
  "companyTypes": [
    1
  ],
  "country": "Country|1",
}
Run Code Online (Sandbox Code Playgroud)

第三

"Campaign|1001":{
  "_id": 1001,
  "_type": "Campaign",
  "banners": [],
  "carriers": [
    "Telstra"
  ],
  "country": 1,
  "created": "2016-03-08T18:30:00.000Z",

 }
Run Code Online (Sandbox Code Playgroud)

这里的关键是"name | _id",我在每个json之前都有.

我有这种类型所有json.我尝试通过引用此源Couchbase N1QL连接查询来加入下面的查询

SELECT d1.*,d2.* FROM 
default d1 USE KEYS "Company|a1091aa0-b548-11e6-957e-139be07f46df"
JOIN default d2 ON KEYS d1.country;
Run Code Online (Sandbox Code Playgroud)

我得到了渴望的结果.

但当我删除USE KEYS"公司| a1091aa0-b548-11e6-957e-139be07f46df"然后运行以下查询我得到INDEX错误 …

node.js couchbase sql++

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