嵌套(嵌入)树模型与mongodb环回

时间:2014-12-18 10:15:21

标签: node.js mongodb loopbackjs

我试图弄清楚如何使用mongodb在loopback中设置一个非常简单的嵌套“treenode”模型。这个想法是只有一个模型(为此):treenode可以包含其他treenode。我想通过mongodb嵌套文档立即存储它们:

- TreeNode (document):
  Name: "A",
  Nodes: [          
     { 
       Name: "A-A",
       Nodes: [
          { 
            Name: "A-A-A",
            Nodes: []
          },
          { 
            Name: "A-A-B",
            Nodes: []
          },
          { 
            Name: "A-A-C",
            Nodes: []
          }         
      },       
      { 
       Name: "A-B",
       Nodes: []       
      },  
  ]

此外,任何级别的每个节点都与其他模型有关系

将有许多顶级根节点(文档)。哪种关系类型以及我应该如何使用?

2 个答案:

答案 0 :(得分:1)

不幸的是,关于这个主题的文档还不多。目前,请参阅http://docs.strongloop.com/display/LB/Embedded+models+and+relations

答案 1 :(得分:0)

您应该单独定义嵌套模型,然后将它们声明为瞬态模型。然后loopback应该将它们存储在其父模型中,如http://loopback.io/doc/en/lb2/Embedded-models-and-relations.html#transient-versus-persistent-for-the-embedded-model

所述

定义瞬态数据源

服务器/ datasources.json

{
  ...
  "transient": {
    "name": "transient",
    "connector": "transient"
  }
}

服务器/模型config.json

{
  ...
  "BaseNode": {
    "dataSource": "db",
    "public": true
  },
  "NestedNode": {
    "dataSource": "transient",
    "public": false
  }
}

模型定义应该是这样的:

<强>公共/模型/ NestedNode.json

{
  "name": "NestedNode",
  "base": "Model",
  "properties": {
      "name": {
          "type": "string"
      }
  },
  "relations": {
    "nodes": {
      "type": "referencesMany",
      "model": "NestedNode",
      "options": {
        "validate": true,
        "forceId": false
      }
    }
}

<强>公共/模型/ BaseNode.json

{
  "name": "BaseNode",
  "base": "PersistedModel",
  "properties": {
     "name": {
        "type": "string"
     }
  },
  ...
  "relations": {
    "nestedNode": {
      "type": "embedsMany",
      "model": "Link",
      "scope": {
        "include": "linked"
      }
    }
  },
  ...
}

您也可能会遇到曲目参考问题。