Couchbase n1ql匹配任何子文档属性值

时间:2017-01-10 11:49:05

标签: couchbase n1ql

我的文档结构的另一个问题是:

{
  "desktop": {
    "default": {
      "s": {
        "camp": {
          "100112": 0,
          "100114": 0,
          "100122": 0
        },
        "score": 1
      }
    }
  }
} 

我想找到至少有一个营地属性大于0的文件。我喜欢这样的东西:

select * from my_bucket t where ANY camp_id IN desktop.default.s.camp SATISFIES camp_id.value > 0 END

但当然它不起作用:)。

任何线索?

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用ANY ... IN ... SATISFIES子句,您已走上正轨。

您的查询的主要问题是您的临时value对象中没有camp_id属性。相反,您可以使用OBJECT_VALUES函数(https://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/objectfun.html)从camp项中提取值并直接比较它们。

您的查询将类似于以下内容:

SELECT 
  * 
FROM my_bucket 
WHERE 
  ANY camp_val 
  IN OBJECT_VALUES(default.desktop.default.s.camp) 
  SATISFIES camp_val > 0 
END