【问题标题】:map and reduce queries in couchdb在 couchdb 中映射和减少查询
【发布时间】:2012-03-24 07:53:02
【问题描述】:

我是编写 couchdb 映射和减少查询的新手。我的要求之一是基于我们必须发出数据的一些键。我为此写了成功,如下所述。

function(doc) {
emit([doc.type , doc.category, doc.user], doc);

}

如果我们给出三个关键值

 http://localhost:5984/test/_design/myDesign/_view/myView?key=["Science","A","John"] 

然后将发出该数据。 但我的疑问是,如果我们为该视图提供一个键或两个键,我如何获取数据。这意味着对于上面的视图,如果用户提到一个键,如 doc.user,那么用户数据将基于这三个键发出。还有一个疑问是,我们可以为一个键提供两个值吗? ?假设用户想要通过使用相同的视图获取用户名为 JOHN 或 Joe 的数据。请提供指导以实现。

谢谢。

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    你可以这样改变你的看法:

    emit([doc.user, doc.type, doc.category], doc);
    

    然后请求

    ?startkey=["someName"]&endkey=["someName",{}] 
    

    然后在结果列表中是所有具有 doc.user="someName" 的文档,无论类型和类别如何

    如果您需要更具体的信息,您可以在通话中添加其他条件:

    ?startkey=["someName","someType"]&endkey=["someName","someType",{}] 
    

    然后您会收到所有带有 someName 和 someType 的文档。

    但你必须使用相同的顺序(关键字段必须从左到右填写)

    如果您需要另一个订单(仅查找类型),您必须在同一函数(或另一个函数)中使用另一个订单执行第二次发射。

    只有在提供孔钥匙的情况下才能同时要求两把钥匙。那么你必须用 body 调用 view py POST

    { keys=[["Science","A","John"],["Science","A","Joe"]] }

    【讨论】:

    • 感谢您的回复,{ keys=[["Science","A","John"],["Science","A","Joe"]] } 但它不起作用,您能否提供一次访问同一视图的两个值的语法
    • 尝试使用 keys 周围的引号。有关详细信息,请参阅the documentation
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2011-09-23
    • 2019-06-03
    • 2012-06-04
    相关资源
    最近更新 更多