c# - Working with hierarchical data in Mongo -




note: ended answering own question shortly after posting this. , sorry if spent time reading rediculously long post.



introduction



i'm sort of mongo noob, trying hang of things here.

i looking @ trying create hierarchical data structure can add nodes/leaves dynamically. schema fixed, nodes on given tree should able change @ time. main thing i'm looking how add/remove nodes on nested nodes without rewriting whole tree.

here'es example static analysis program, collection called "builds". sparse document (_id's removed brevity's sake):

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



kick off, following;

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


then, add assembly:

db.builds.update({name: "build changeset #5678"},                  {$addtoset: {assemblies: {name: "someassembly1.dll"}}}) 



the real question

now, how add warning? thinking might this:

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

but gives me "missing : after property id (shell):0"

tried putting quotes around "assemblies.warnings", says "can't append array using string field name [warnings]"


does know mongo better , can me?

am wrong in trying nested trees on mongo? better off doing multiple collections , relational?

under impression not doing relational (as acid) 1 of main benefits mongo, again, maybe thats noob showing again.

so i've been struggling day, , sure enough, moment post stackoverflow run across gives me answer. proper answer looks this:

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

note the

"assemblies.$.warnings" 


found here: http://groups.google.com/group/mongodb-user/browse_thread/thread/e8f4ea5dc1955a98#


Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -