代码之家  ›  专栏  ›  技术社区  ›  csauve

在Mongo中使用分层数据

  •  3
  • csauve  · 技术社区  · 14 年前







    介绍



    我有点像个蒙哥人,只是想弄清楚这里的窍门。

    我正在尝试创建一个层次化的数据结构,我可以动态地向其中添加节点/叶。模式是固定的,但是任何给定树上的节点应该可以随时更改。我要寻找的主要内容是如何在嵌套较深的节点上添加/删除节点,而不必重写整个树。

    “生成” . 稀疏文档如下所示(为了简洁起见,删除了\u id):

    { name: "build from changeset #5678", 
      assemblies: [
        { name: "someAssembly1.dll",
          warnings: [
            { level: 0,
              message: "something doesn't conform to our standard"
            }
          ] 
        }             
      ]
    }
    



    为此,我做了以下几点:;

    db.builds.insert({name: "build from changeset #5678})
    


    db.builds.update({name: "build from changeset #5678"},
                     {$addToSet: {assemblies: {name: "someAssembly1.dll"}}})
    



    现在, 如何添加警告? 我在想可能是这样的:

    db.builds.update({
      name: "build from changeset #5678",
      "assemblies.name": "someAssembly1.dll"
    },{
     $addToSet: {
       assemblies.warnings: {
         level: 0,
         name: "something doesn't conform to our standard"
       }
     }
    })
    

    “缺少:在属性id(shell):0之后”

    "组件.警告" ,但上面说


    有谁比我更了解蒙哥,能帮我吗?

    我试着在蒙戈岛上做深巢树是不是错了?我最好使用多个集合和一些关系型的?

    在我的印象中,不做关系(以及ACID)是Mongo的主要好处之一,但话说回来,也许这只是我的noob再次出现。

    1 回复  |  直到 14 年前
        1
  •  2
  •   csauve    14 年前

    db.builds.update({
      name: "build from changeset #5678",
      "assemblies.name": "someAssembly1.dll"
    },{
     $addToSet: {
       "assemblies.$.warnings": {
         level: 0,
         name: "something doesn't conform to our standard"
       }
     }
    })
    

    注意

    "assemblies.$.warnings"
    


    我在这里找到的: http://groups.google.com/group/mongodb-user/browse_thread/thread/e8f4ea5dc1955a98#