OrientDB:如何在NodeJS中获取树结构模型中的所有文档及其子文档(具有所有属性)

OrientDB:如何在NodeJS中获取树结构模型中的所有文档及其子文档(具有所有属性),orientdb,orientjs,Orientdb,Orientjs,我有一个简单的文档段,其中有一个属性名称。每个段可以有0..N个段类型的子段,它们的子段也可以有段子段0..N,因此基本树结构。 边是从子段到父段创建的 我需要的是在一个命令中获取NodeJS根段及其所有子代和子代等,这样我就可以检索如下内容: [ { "@rid": "#1:1", "name": "Segment 1", "segments": [ { "@rid": "#1:2"

我有一个简单的文档,其中有一个属性名称。每个段可以有0..N个段类型的子段,它们的子段也可以有段子段0..N,因此基本树结构。
边是从子段到父段创建的

我需要的是在一个命令中获取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"
              } 
            ]
          }
        ]
      }
    ]
试试这个:

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();
希望能有帮助

关于

试试这个:

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();
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();});
希望能有帮助


视thx为您的帮助,但traverse仅返回
rid
。我需要使用fetchplan检索Segment name.thx以获得帮助,但traverse只返回
rid
。我需要使用fetchplan来检索段名。
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();});