2

我在 Couchbase 中有一组文档,其中每个文档都可能有一些用户作为编辑 - 数组中的一组 UserID。

我想查询具有特定用户 ID(用户名)的用户不在编辑器列表中的所有文档?

这是我的数据的样子:

document1: {editors[1,2,3,4]}
document2: {editors[1,2,3,4,5]}

user{id:5}

关于上面的数据 - 我如何查询所有类型为 document 的文档,其中 id=5 的用户未列在 editors 数组中 - 意味着只有 document1 应该返回?

4

3 回答 3

2

我想不出用 Couchbase 视图执行此操作的方法,因为据我了解您的描述,这是文档和用户之间的多对多关系,您需要执行“不在”查询。您可以使用Couchbase 的新查询语言N1QL轻松完成。它目前处于开发人员预览版中 - 这是否对您有用取决于您需要多长时间将此代码投入生产。如果您现在需要它,那么它可能不是最好的解决方案。另一种选择是使用 Couchbase 的ElasticSearch 集成功能并在 ElasticSearch 中进行查询,然后自己从 Couchbase 中检索相关文档。这也解决了任务,好处是现在可以用于生产。

于 2015-01-11T19:45:24.770 回答
0

另一种选择是在客户端执行此操作。您可以在视图中检索所有文档及其编辑器并遍历列表并通过循环丢弃编辑器列表中存在 user_id 5 的任何文档。如果您不希望有很多行符合“not in”子句的条件,那么这样做不会浪费太多周期。这对于 N1QL 来说是微不足道的。您可以快速设置并尝试。开发者预览版已经可用,我们目前正在努力在该产品的下一个主要版本中发布它。谢谢-cihan

于 2015-01-12T07:49:40.013 回答
0

好的,我得到了一种适合我要求的解决方案。我在页面中添加了分页功能,这有助于不浪费太多资源。

基本上我每个周期返回 100 个(取决于页面大小)“文档”类型的文档。在每个周期中,我都会浏览行列表并仅选择未分配给登录用户的那些。如果我返回的页面有 100 行,否则我会继续另一个循环(页面大小)并尝试添加要返回的缺失行以供查看。

这很丑陋,但是我看不到任何没有查询的简单易用的解决方案。

发现了另一件事 - Telerik 的 LINQ to Couchbase

于 2015-01-12T12:25:43.583 回答