在NodeJS Mongoose中推送阵列JSON

时间:2015-09-13 09:36:10

标签: node.js mongoose

我脚本从mongodb获取数据以推送JSON格式的数据,并带有获取子数据的函数:

var tree = [];
orgchart.find({ _client: "558f030fd1bdb6ee1859c279", _parent: "root" }, function(err,doc){
  // function get child
  getChild = function(_client, _parent){
    var dj = [];
    orgchart.find({ _client : _client, _parent: _parent }, function(err, doc1){
      var jsonData1 = JSON.parse(JSON.stringify(doc1));
      if(jsonData1.length > 0){
        for(var j=0; j<jsonData1.length; j++){
          dj.push({ 'text' : '"'+jsonData1[j].name+'"' });
          console.log(jsonData1[j].name);
        }
      }
    });

    return dj;
  };

  var jsonData = JSON.parse(JSON.stringify(doc));
  if(jsonData.length > 0){
    for(var i=0; i<jsonData.length; i++){
      tree.push({
        'text' : jsonData[i].name,
        'children' : JSON.parse(JSON.stringify(getChild(jsonData[i]._client, jsonData[i]._id)))
      });
    }
  }

  res.send(tree);
});

我从控制台日志得到了结果:

Level 2A
Level 2B

但是在JSON数据中是空的

[
 {
  "text": "Level 1",
  "children": []
 },
 {
  "text": "Level 1B",
  "children": []
 }
]

我需要这样的数据:

[
 {
  "text": "Level 1",
  "children": [{ "text": "Level 2A" }]
 },
 {
  "text": "Level 1B",
  "children": [{ "text": "Level 2B" }]
 }
]

我的代码有什么问题,我是Node JS的新手

1 个答案:

答案 0 :(得分:0)

使用async.map解决它

这是我的剧本:

orgchart.find({ _client: "558f030fd1bdb6ee1859c279", _parent: "root" }, function(err, doc){
      if(err){
        callback(err.message);
      }

      async.map(doc,
        // get child from each item
        function(item, callback){
          // child query
          orgchart.find({ _client: item._client, _parent: item._id }, function(err, doc){

            var doc1 = [];
            for(var i=0; i<doc.length; i++){
              doc1.push({ 'level 2': doc[i].name });
            }

            var data = { 'level 1': item.name, 'children': doc1 };

            callback(null, data);
          });  
        },
        // show result
        function(err, results){
          res.send(results);
        }
      );
  });

结果是:

[
 {
  "level 1": "Level 1",
  "children": [
   {
    "level 2": "Level 2A"
   },
   {
    "level 2": "Level 2B"
   }
  ]
 },
 {
  "level 1": "Level 1B",
  "children": []
 }
]

感谢@DevAlien先生推荐使用async libray(https://github.com/caolan/async