vye*_*ri5 4 javascript couchdb join mapreduce relational-algebra
我有两个文档,一个是树结构,另一个是第一个doc.我试图通过fk和pk加入这两个doc.我无法得到实际结果,它显示所有空值.
第一份文件
{
"name": "one",
"root": {
"level1" : {
"level2" : {
"level3" : {
"itemone": "Randomkey1",
"itemtwo": "Randomkey2
}
}
}
},
"type": "firstdoc"
}
Run Code Online (Sandbox Code Playgroud)
第二个文件
{
"name" : "two",
"mapBy" : "Randomkey1",
"type" : "senconddoc
}
Run Code Online (Sandbox Code Playgroud)
我写了一个map函数,它列出了给定1级或2级或3级的所有键.现在我想要使用密钥加入第一个doc和第二个doc.我尝试了两种方式(第一种:我得到所有(Root,Randomkey),(docName,Randomkey1)但它没有做任何连接.我正在寻找像(Root,docName)这样的结果
有人可以协助解决这个问题
地图
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);
}
}
Run Code Online (Sandbox Code Playgroud)
要模拟连接,您必须输出带有_idin 的文档,_id需要指向_id文档的实际值.然后你可以利用include_docs=true相关文件.这里有多对多的示例:http://danielwertheim.se/couchdb-many-to-many-relations/
如果这不适用,您可以通过先返回自定义键进行两步手动连接.然后对所有文档视图进行第二次查询,并指定多个键.
| 归档时间: |
|
| 查看次数: |
7185 次 |
| 最近记录: |