Couchdb使用密钥连接两个文档 [英] Couchdb join two documents using key

查看:174
本文介绍了Couchdb使用密钥连接两个文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个文档,一个是树结构,另一个是第一个doc。我试图通过fk和pk加入这两个doc。我无法获得实际结果并显示所有空值。

I have two documents one with tree structure and the other one relation to the first doc. Im trying to join these two doc`s by fk and pk. I couldnt get the actual results and it displays all null values.

第一个文档

{
   "name": "one",
   "root": {
            "level1" : {
                       "level2" : {
                                 "level3" : {
                                           "itemone": "Randomkey1",
                                           "itemtwo": "Randomkey2
                                          }
                                }
                     }
         },
   "type": "firstdoc"
}

第二个文档

{
    "name"  : "two",
    "mapBy" : "Randomkey1",
    "type"  : "senconddoc
}

我写了一个地图函数,其中列出了给出的所有键等级1或2或3。现在我想要使用密钥加入第一个doc和第二个doc。我尝试了两种方式(第一种:我得到所有(Root,Randomkey),(docName,Randomkey1),但它没有做任何连接。我正在寻找像
(Root,docName)

I`ve written a map function, which lists all the keys given a level 1 or 2 or 3 . Now I want o join this first doc and second doc using the key. Ive tried two ways (first: Im getting all (Root, Randomkey), (docName, Randomkey1) but it doesnt do any join. Im looking for a result like (Root, docName)

有人可以协助解决这个问题

Could someone assist in fixing this

地图

function(doc) {
   if (doc.type === 'firstdoc' || doc.type === 'seconddoc' ) {
      var rootObj = doc.Root;
      for (var level1 in rootObj) {

         var level2Obj = doc.Root[level1];

         for (var level2 in level2Obj) {

           var keys = new Array();
            var level3Obj = level2Obj[level2];

            for (var i in level3Obj) {

                var itemObj = level3Obj[i];

                for (var i in itemObj) {
                    keys.push(itemObj[i]);

                    emit(doc.name, [itemObj[i], 0]);

                     var firstDocName = doc.name;

                    //This is gives null values
                    if (doc.Type === 'senconddoc' && doc.mapBy === itemObj[i]) {

                         emit(firstDocName , doc);
                    }
                }
            }



        }


    }
}

//This just lists keys to me
if (doc.type === 'senconddoc') {

    emit([doc.mapBy, 1] , doc);
}
}


推荐答案

到模拟联接你必须输出一个带有 _id 的文档, _id 的值需要指向一个文件的实际 _id 。然后,您可以使用 include_docs = true 来提取相关文档。这里有多对多的示例: http://danielwertheim.se/couchdb-many -to-many-relations /

To simulate joins you have to output a doc with an _id in it, the value of the _id need to point to an actual _id of a document. Then you can make use of include_docs=true to pull in the related documents. Example with many-to-many here: http://danielwertheim.se/couchdb-many-to-many-relations/

如果这不适用,您可以通过先返回自定义键进行两步手动连接。然后针对所有文档视图进行第二次查询,并指定多个键。

If this is not applicable, you can make a two step manual join by first returning custom keys. Then make a second query against the all documents view, with multiple keys specified.

这篇关于Couchdb使用密钥连接两个文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆