将N1QL与文档密钥一起使用

Spa*_*key 1 couchbase couchbase-view sql++

我是相当新的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.

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

Nic*_*boy 5

如果我对你的问题有误解,我会道歉,但我会尽我最大的努力.如果我误解了,请告诉我,我们将从那里开始工作.

我们使用以下场景:

GROUP_1

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

STORE_2

{
    "cbType": "store",
    "ID": 2,
    "name": "some store name"
}
Run Code Online (Sandbox Code Playgroud)

STORE_4

{
    "cbType": "store",
    "ID": 4,
    "name": "another store name"
}
Run Code Online (Sandbox Code Playgroud)

store_6

{
    "cbType": "store",
    "ID": 6,
    "name": "last store name"
}
Run Code Online (Sandbox Code Playgroud)

现在假设您不想查询特定组(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';
Run Code Online (Sandbox Code Playgroud)

在此进行了一些假设.您的文档都存在于同一个存储桶中,您只想从中进行选择group_1.当然,您可以使用a LIKE并将组ID切换为百分比通配符.

如果事情没有意义,请告诉我.

最好,