简单来说,我的意思相当于:
SELECT * FROM Orders WHERE Status =' Shipped';
该文件将如下:
{ "输入":"顺序", " order_no":10002, " order_date":" 2010-07-24", " status":"发货", " customer_no":1001 }
我可以用这样的地图制作视图:
function (doc, meta) {
if(meta.type == "json" && doc.type == "order" && doc.status == "Shipped") {
emit(meta.id, doc);
}
}
但是我需要为我想查询的每个状态值提供不同的视图。我已经在Couchbase控制台中尝试了一些过滤器参数的各种排列,但还没有找到可行的组合。
答案 0 :(得分:1)
我想出了这个,并认为我会分享我的解决方案。
人们使用View阅读了很多关于“创建索引”的内容,而这就是它不仅仅是一个SQL VIEW。因此,为了成功使用诸如startkey和endkey之类的View参数,我必须创建一个View,它会发出我想要查询的键。在这种情况下:
function (doc, meta) {
if(meta.type == "json" && doc.type == "order") {
emit(doc.status, doc);
}
}
请注意,我不会将meta.id作为第一个arg发出到emit()。如果我这样做,我将不得不按身份查询,而不是按状态查询。无论如何,有了这个视图(我们可以称之为by_status),如果我想要发货订单,那么startkey和endkey参数都可以“发货”:
陈旧=假安培; startkey =%22Shipped%22安培; endkey =%22Shipped%22安培; connection_timeout = 60000&安培;限制= 10安培;跳过= 0
他们说返回整个doc(第二个emit()arg)并不是一个好主意。为了更经济,我想我可以返回一系列doc属性,如下所示:
function (doc, meta) {
if(meta.type == "json" && doc.type == "order") {
emit(doc.status, [meta.id, doc.customer_no, doc.order_no, doc.order_date]);
}
}
仍提供所有属性,但不重复doc.type(硬过滤到“order”)和doc.status,这是结果的关键属性。顺便说一句,添加meta.id给了我一些我可以在get()调用中使用的东西。
希望这有助于某人。