2016-11-08 71 views
1

我有简单文档分段带有一个属性名称。每个细分受众群都可以有0..N个孩子,并且他们的孩子也可以有细分孩子0..N,所以基本的树结构。
边缘从子段创建到父级。OrientDB:如何在NodeJS中以树结构模型获取所有文档及其子项(具有所有属性)

我需要的是在的NodeJS根链段与所有的孩子和孙子等在一个命令来获取,这样我就可以找回这样的事情:

[ 
     { 
     "@rid": "#1:1", 
     "name": "Segment 1", 
     "segments": [ 
      { 
      "@rid": "#1:2", 
      "name": "Segment 1.1", 
      "segments": [ 
       { 
       "@rid": "#1:3", 
       "name": "Segment 1.1.1" 
       }, 
       { 
       "@rid": "#1:4", 
       "name": "Segment 1.1.2" 
       } 
      ] 
      }, 
      { 
      "@rid": "#1:5", 
      "name": "Segment 1.2", 
      "segments": [ 
       { 
       "@rid": "#1:6", 
       "name": "Segment 1.2.1" 
       }, 
       { 
       "@rid": "#1:7", 
       "name": "Segment 1.2.2" 
       } 
      ] 
      } 
     ] 
     }, 
     { 
     "@rid": "#1:8", 
     "name": "Segment 2", 
     "segments": [ 
      { 
      "@rid": "#1:9", 
      "name": "Segment 2.1", 
      "segments": [ 
       { 
       "@rid": "#1:10", 
       "name": "Segment 2.1.1" 
       }, 
       { 
       "@rid": "#1:11", 
       "name": "Segment 2.1.2" 
       } 
      ] 
      }, 
      { 
      "@rid": "#1:12", 
      "name": "Segment 2.2", 
      "segments": [ 
       { 
       "@rid": "#1:13", 
       "name": "Segment 2.2.1" 
       }, 
       { 
       "@rid": "#1:14", 
       "name": "Segment 2.2.2" 
       } 
      ] 
      } 
     ] 
     } 
    ] 

回答

0
function parseSegment(segment) { 
    var parsedSegment = { 
     id : segment['@rid'].toString(), 
     name: segment.name 
    }; 

    if (segment.in_) { 
     var children = segment.in_.all().map(edge => parseSegment(edge.out)); 

     if (children.length) { 
      parsedSegment.children = children; 
     } 
    } 

    return parsedSegment; 
} 

db.select() 
    .from('Segment') 
    .where('out().size() = 0') 
    .fetch({'in_':'-1'}) 
    .transform(parseSegment) 
    .all() 
    .then(segments => { 
     console.log(JSON.stringify(segments, null, 2)); 
    }) 
    .finally(() => {db.close();}); 
0

试试这个:

var OrientDB = require('orientjs'); 
var db = OrientDB({ 
    host: 'localhost', 
    port: 2424, 
}); 
var db = db.use({ 
    name: 'your db name', 
    username: 'your username', 
    password: 'your password' 
}); 
db.query('traverse * from Segment') 
.then(function (response) { 
console.log(response); 
}); 
db.close(); 

希望它可以帮助

问候

+0

thx对你有帮助,但是只能遍历返回'rid'。我需要使用fetchplan来检索段名称。 –

相关问题