我是相当新的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呢。
一旦我有,我会发布了完整的解决方案,以及我在这个过程中遇到的所有速度颠簸。
我很抱歉,如果我有你的问题的误解,但我想给我最好的拍摄。 如果我误解了,请让我知道,我们会从那里工作。
让我们用下面的情形:
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的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切换到百分号通配符。
让我知道,如果事情没有意义。
最好,
试试这个查询:
select Name
from buketname a join bucketname b ON KEYS a.StoreList
where Name="Group Atlas 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);
我有一个类似的要求,我得到了什么,我需要这样的查询:
SELECT store
FROM `bucket-name-here` group
JOIN `bucket-name-here` store ON KEYS group.StoreList
WHERE group.cbType = 'group'
AND group.ID = 1