在使用Couchbase进行一些研究和测试后,我得到了一些好的结果。 然而,看起来必须创建一个时间长度并且不够灵活似乎很奇怪。
基本上,如果我有这样的观点..
function(doc, meta) {
emit([doc.name, doc.location, doc.gender, doc.birthYear, doc.birthMonth], null);
}
我想查询但不同的键。比如,也许名字=“约翰”和性别=“M” 我似乎无法做到startKey = [“John”,{},“M”],endKey = [“John”,{},“M”,{}]。
同样,如果我只想按性别和出生月份过滤上述内容,该怎么办? 似乎我必须为每种可能类型的查询手动创建一个单独的视图,如果不是最优的话,它会包含大量数据点。
我看到有任何问题要解决这个问题。此外,我调查了传递args以映射或缩减以动态地执行任何操作,但是无法完成。我将被困在所有组级别的所有记录中,然后必须手动排序/聚合此数据。
可以这样做吗?
谢谢
答案 0 :(得分:2)
从Couchbase版本4.x开始,您有N1QL query language。您可以指定筛选条件以选择json对象,而无需任何视图。
因此,根据您的示例,您应该能够发出类似的查询:
SELECT *
FROM your_bucket_name
WHERE name = 'John' AND gender = 'M'
这是一个感受它的N1QL tutorial。
另一种方法是使用Couchbase integration with ElasticSearch并在ElasticSearch engine中执行搜索查询,该搜索查询会根据您的搜索条件返回找到的所有密钥。
答案 1 :(得分:1)
http://www.couchbase.com/communities/n1ql
N1QL对于基数数据来说是更丰富的语言,它不像视图那样受限