在Couchbase中查询“Not In”

时间:2015-01-11 18:02:04

标签: couchbase couchbase-view

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

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

这是我的数据:

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

user{id:5}

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

这非常难看,但我无法看到任何简单明了的解决方案。

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