我一直在使用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
。
很抱歉,如果我不清楚的话。我看了很多,但我不知道如何表达我的问题或我应该搜索什么特定的关键字。我不知道要搜索什么,所以我最后只是在这里问。
提前感谢您的时间。
答案 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级。