创建视图以在CouchDb中获取多个文档

创建视图以在CouchDb中获取多个文档,couchdb,nosql,Couchdb,Nosql,这里是CouchDb新手 我在CouchDb中有几个具有相同结构的文档: { "_id": "1170140286", "_rev": "1-79ffad4d4cbe24effc72f9ec519373ca", "data": [ { "photo": "link_of_photo1", "userid": "34623", "username": "guest-user1"

这里是CouchDb新手

我在CouchDb中有几个具有相同结构的文档:

{
    "_id": "1170140286",
    "_rev": "1-79ffad4d4cbe24effc72f9ec519373ca",
    "data": [
        {
            "photo": "link_of_photo1",
            "userid": "34623",
            "username": "guest-user1"
        },
        {
            "photo": "link_of_photo2",
            "userid": "34623",
            "username": "guest-user1"
        },
        {
            "photo": "link_of_photo3",
            "userid": "34623",
            "username": "guest-user1"
        }
    ]
}

我不知道我想做的是否可行,但我正在尝试创建一个视图,将这些文档的数据元素合并到一个文档中:

[
    {
        "photo": "link_of_photo1",
        "userid": "34623",
        "username": "guest-user1"
    },
    {
        "photo": "link_of_photo2",
        "userid": "34623",
        "username": "guest-user1"
    },
    {
        "photo": "link_of_photo3",
        "userid": "34623",
        "username": "guest-user1"
    },
    {
        "photo": "link_of_photo1",
        "userid": "6334",
        "username": "guest-user2"
    },
    {
        "photo": "link_of_photo2",
        "userid": "6334",
        "username": "guest-user2"
    },
    {
        "photo": "link_of_photo3",
        "userid": "6334",
        "username": "guest-user2"
    }
]

我很确定我没有正确理解couchdb的逻辑,所以任何帮助都是非常特殊的。

请参考这些链接

示例代码:

function(doc){
if(doc.items)
doc.items.forEach(function(item){
      emit(doc._id,{_id:item});
  })
}


我希望这些将解决您的问题。

您可以获得包含所有链接的查看结果。它将是一个数组,但看起来与模拟结果结构有点不同。视图逻辑可以如下所示(示例中未使用行的键-可能用户名或id是一个有用的输入值):

为了完整起见,应该提到,有一种方法可以在服务器端“合并所有文档”。在数据最终发送回请求者之前,可以通过CouchDB列表操纵视图结果。但是,这是不推荐的!请认真对待这一点,不要尝试这一点——这是一个巨大的性能问题,CouchDB的目标从来都不是提供这样的用例

function(doc){
if(doc.items)
doc.items.forEach(function(item){
      emit(doc._id,{_id:item});
  })
function (doc) {
  var data = doc.data
  if (!data) return

  for (var i = 0, link; link = data[i++];)
    emit(null, link)
}