在 Couchbase 中查询 "Not In"

Querying "Not In" in Couchbase

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

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

这是我的数据:

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

user{id:5}

关于上面的数据 - 我如何查询所有类型为 id=5 的用户未列在编辑器数组中的文档 - 这意味着只有 document1 应该 return?

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

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

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

基本上每个周期 return 100(取决于页面大小)"document" 类型的文档。在每个周期中,我都会浏览行列表,并且 select 只有那些登录的用户没有被分配给。如果我的页面有 100 行,我 return 那么,否则我将继续另一个循环(页面大小)并尝试添加缺少的行以 return 编辑视图。

这很丑陋,但我看不到任何简单易行的解决方案而不需要查询。

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