使用N1QL与文献关键词(Using N1QL with document keys)

2019-10-23 17:09发布

我是相当新的couchbase并试图找到答案,我想到目前为止没有太大的成功,创造一个特定的查询。

我已经使用视图或N1QL之间争论了这种特殊情况下,并与N1QL解决,但没有设法得到它的,所以也许工作视图毕竟是更好的。

基本上我有以下文档的文档键(GROUP_1):

Group_1
{
  "cbType": "group",
  "ID": 1,
  "Name": "Group Atlas 3",
  "StoreList": [
    2,
    4,
    6
  ]
}

我也有“店”的文件,它们的键在本文档的storelist上市。 (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());

然后我就可以循环通过它的storelist并获得同样的方式对所有它的商店,但我并不需要我做什么组,我要的是商店和会者优先做这在一个单一的操作。

有谁知道如何直接做N1QL对指定文档的价值? 喜欢的东西(这是我只是想更清楚地说明什么,我试图让在总虚非工作代码):

SELECT * FROM mycouchbase WHERE documentkey IN Group_1.StoreList

谢谢

更新:那么网卡的解决方案不起作用;

这是最接近我得到我所需要的ATM:

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

"results":[{"b":2},{"b":4},{"b":6}]

返回我想对于任何给定组(Group_X)商店的ID列表 - 我还没有找到一种方式来获得完整的房屋,而不是只在同一个语句的ID呢。

一旦我有,我会发布了完整的解决方案,以及我在这个过程中遇到的所有速度颠簸。

Answer 1:

我很抱歉,如果我有你的问题的误解,但我想给我最好的拍摄。 如果我误解了,请让我知道,我们会从那里工作。

让我们用下面的情形:

GROUP_1

{
    "cbType": "group",
    "ID": 1,
    "Name": "Group Atlas 3",
    "StoreList": [
        2,
        4,
        6
    ]
}

STORE_2

{
    "cbType": "store",
    "ID": 2,
    "name": "some store name"
}

STORE_4

{
    "cbType": "store",
    "ID": 4,
    "name": "another store name"
}

store_6

{
    "cbType": "store",
    "ID": 6,
    "name": "last store name"
}

现在让我们说你wan't从特定组(GROUP_1)查询商店,但包括有关该组的其他信息。 你基本上要使用N1QL的UNNESTJOIN操作符。

这可能会离开你,象这样的查询:

SELECT 
    stores.name 
FROM `bucket-name-here` AS groups 
UNNEST groups.StoreList AS groupstore
JOIN `bucket-name-here` AS stores ON KEYS ("store_" || groupstore.ID) 
WHERE 
    META(groups).id = 'group_1';

一些假设在本作。 无论您的文件在同一个桶存在,你只需要选择从group_1 。 当然,你可以使用LIKE和组ID切换到百分号通配符。

让我知道,如果事情没有意义。

最好,



Answer 2:

试试这个查询:

select Name 
from buketname a join bucketname b ON KEYS a.StoreList 
where Name="Group Atlas 3"


Answer 3:

根据您的更新,您可以执行以下操作:

SELECT b, s
FROM DataBoard c USE KEYS ["Group_X"]
UNNEST c.StoreList b
JOIN store_bucket s ON KEYS "Store_" || TO_STRING(b);


Answer 4:

我有一个类似的要求,我得到了什么,我需要这样的查询:

SELECT store
FROM `bucket-name-here` group
JOIN `bucket-name-here` store ON KEYS group.StoreList
WHERE group.cbType = 'group'
AND group.ID = 1


文章来源: Using N1QL with document keys