我对 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 的解决方案不起作用;
这是我最接近我需要的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。
完成后,我将发布完整的解决方案以及我在此过程中遇到的所有减速带。