我对couchbase很新,并试图找到我尝试创建的特定查询的答案,目前为止并没有取得多大成功。
我在使用视图或N1QL来讨论这个特殊情况并使用N1QL进行了辩论但是没有设法让它工作,所以也许视图更好。
基本上我有以下文档的文档密钥(Group_1):
Group_1
{
"cbType": "group",
"ID": 1,
"Name": "Group Atlas 3",
"StoreList": [
2,
4,
6
]
}
我也有'存储'文档,其密钥列在本文档的商店列表中。 (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的解决方案不起作用;
这是我最接近我需要的东西:
SELECT b from DataBoard c USE KEYS ["Group_X"] UNNEST c.StoreList b;
"results":[{"b":2},{"b":4},{"b":6}]
返回我想要的任何给定组(Group_X)的商店的ID列表 - 我还没有找到一种方法来获取完整的商店,而不仅仅是在同一个语句中的ID。
有了,我会发布完整的解决方案以及我在此过程中遇到的所有速度障碍。
答案 0 :(得分:5)
如果我对你的问题有误解,我道歉,但我会尽我所能。如果我误解了,请告诉我,我们将从那里开始工作。
让我们使用以下场景:
<强> 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的UNNEST
和JOIN
运算符。
这可能会给你一个类似的查询:
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切换为百分比通配符。
如果某些事情没有意义,请告诉我。
最佳,
答案 1 :(得分:0)
尝试此查询:
select Name
from buketname a join bucketname b ON KEYS a.StoreList
where Name="Group Atlas 3"
答案 2 :(得分:0)
根据您的更新,您可以执行以下操作:
SELECT b, s
FROM DataBoard c USE KEYS ["Group_X"]
UNNEST c.StoreList b
JOIN store_bucket s ON KEYS "Store_" || TO_STRING(b);
答案 3 :(得分:0)
我有类似的要求,我通过这样的查询得到了我需要的东西:
SELECT store
FROM `bucket-name-here` group
JOIN `bucket-name-here` store ON KEYS group.StoreList
WHERE group.cbType = 'group'
AND group.ID = 1