gpt4 book ai didi

couchbase - 将 N1QL 与文档键一起使用

转载 作者:行者123 更新时间:2023-12-02 04:19:51 27 4
gpt4 key购买 nike

我对 couchbase 还很陌生,并且尝试找到我正在尝试创建的特定查询的答案,但到目前为止还没有取得太大成功。

对于这个特殊情况,我曾就使用 View 还是 N1QL 进行过争论,最终决定使用 N1QL,但尚未成功使其发挥作用,所以也许 View 毕竟更好。

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

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

我还有“存储”文档,它们的 key 列在该文档的存储列表中。 (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());

然后我可以循环遍历它的商店列表并以相同的方式获取它的所有商店,但我不需要组中的任何其他内容,我想要的只是商店,并且更愿意在单个操作中完成此操作。

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

SELECT * FROM mycouchbase WHERE documentkey IN Group_1.StoreList

谢谢

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

这是我最接近我需要的 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。

一旦完成,我将发布完整的解决方案以及我在此过程中遇到的所有障碍。

最佳答案

如果我误解了您的问题,我深表歉意,但我会尽力解决。如果我误解了,请告诉我,我们将从那里开始工作。

让我们使用以下场景:

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"
}

现在假设您不想查询特定组 (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 切换为百分比通配符。

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

最好,

关于couchbase - 将 N1QL 与文档键一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com