在嵌套数组中查找未知父母的子女(Couchbase)

时间:2016-02-10 07:06:04

标签: multidimensional-array couchbase n1ql

我一直在使用MongoDB并喜欢它,但最近开始使用Couchbase。我在按照自己喜欢的方式检索文档时遇到了一些麻烦。

假设我有一个这样的文件:

//  First Store data in $data
$data = array();
$result = mysql_evaluate($db, $sql, $defaultvalue);
foreach ($result  as $row) {
    $data [] = $row;
}
// Your all data will be store in $data variable
print_r($data);

在MongoDB中,可以按照{ "data": [ { "target": "value1" }, { "target": "value2" }, { "target": "value3" } ] } 的方式执行某些操作(而不是必须指定find({"data.target": value2}))。但是我似乎无法在Couchbase中找到一种方法。

是否有办法(使用N1QL或视图)根据指定的子键查找所有文档而不指定所有中间键?如果我指定它是data.1.target,我可以毫无问题地获取文档,但如果我不知道所需子数组的键,那对我没有任何帮助。

换句话说,对于N1QL,我希望能够在data.1.target子句之后使用data[*].target

很抱歉,如果我不清楚的话。我看了很多,但我不知道如何表达我的问题或我应该搜索什么特定的关键字。我不知道要搜索什么,所以我最后只是在这里问。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:2)

您可以使用any with within子句根据指定的子键查找文档。在您的情况下,n1ql查询将是: 从默认值中选择*,其中数据中的任何t满足t.target =“value2”end;

以上查询为您提供数据[*] .target等于“value2”的所有文档 内部非常强大,因为它也会在对象内搜索嵌套数组。

在您的情况下,您也可以使用任何with in子句,类似于我们教程链接中的内容: http://query.pub.couchbase.com/tutorial/#12 您的具体查询将是: 默认选择*,其中数据中的任何t满足t.target =“value2”end; 但是这个查询只会搜索数组内的1级。