如何在CouchDB中创建包含多个WHERE和OR子句的视图

如何在CouchDB中创建包含多个WHERE和OR子句的视图,couchdb,Couchdb,我如何创建一个类似于这样的SQL查询的视图 从bucket中选择*,其中(uid='$uid'和accepted='Y')或(uid='$uid'和authorid='$logginid') 我的数据是这样存储的: { "id": 9476183, "authorid": 85490, "content": "some text here", "uid": 41, "accepted": "Y", "time": "2014-12-09 10:44:01", "type": "testimoni

我如何创建一个类似于这样的SQL查询的视图

从bucket中选择*,其中(uid='$uid'和accepted='Y')或(uid='$uid'和authorid='$logginid')

我的数据是这样存储的:

{
"id": 9476183,
"authorid": 85490,
"content": "some text here",
"uid": 41,
"accepted": "Y",
"time": "2014-12-09 10:44:01",
"type": "testimonial"
}

视图可以如下所示:

function(doc) {
    if (doc.accepted == 'Y') {
        emit(doc.uid, null);
    }
    emit([doc.uid, doc.authorid], null);
}
您将首先使用
key=$uid
查询它。如果没有匹配项,您将使用
键=[$uid,$loginid]
查询它

function(doc) {
    if (doc.accepted == 'Y') {
        emit(doc.uid, null);
    }
    emit([doc.uid, doc.authorid], null);
}
一个请求就够了。您可以使用POST和参数[uid,authorid],uid]键点击@Simon编写的视图(如上所述)

function(doc) {
    if (doc.accepted == 'Y') {
        emit(doc.uid, null);
    }
    emit([doc.uid, doc.authorid], null);
}

有关模式的详细信息,请参阅。

您好。谢谢你的尝试,但这种方式在我的情况下不起作用。例如,我将始终传递这个值startkey=[uid,authorid]——因此这行代码将发出(doc.uid,null);不希望获得ITEN数组。如果接受,则可以忽略$loginid值。Y它可以工作。它应该可以用以下行替换第三行:emit([doc.uid],null);然后,只要key有一个或两个值,它就会返回结果,但如果我把key=[uid,logginid]放在这里,它就不会返回accepted=YI的文档,因为我建议您执行两个不同的查询。我相信有更好的方法,但这只是一个开始。