Many to many relationship keyed by string using mongoose on node.js

The best way I can describe what I'm after is by starting with a simplified demo page document:

{
    name: "Page Name"
    blocks: {
        "top-content": 50f0ded99561a3b211000001,
        "bottom-content": 50f0ded99561a3b211000002
    }
}

Is there a way I can define this kind of many-to-many relation with mongoose so that I can look them up by string keys like top-content and bottom-content? The relational equivalent to this would be something like including a string on the many to many join table.

Important:

  • I don't want to embed the blocks I'm referencing as they could be referenced by multiple pages.

Mongoose's query population feature supports this, but top-content and bottom-content would need to be ObjectIds instead of strings (which is more efficient anyway).

After some chatting in #node.js on Freenode, it seems like I can just set this up as an array and put arbitrary key/value pairs containing the references I want.

At which point, I'll be dereferencing things myself.

{ //PAGE 1
  name:"Sticks",
  blocks:[
    "top":[OID(5),OID(6)],
    "bottom":[OID(7),OID(8)]
  ]
};
{ //PAGE 2
  name:"Poopsicles",
  blocks:[top:[OID(7)]]
};

//BLOCKS
{
  OID:5,
  name:"top"
};
{
  OID:7,
  name:"bottom rocker"
};

//QUERYING
page.findOne({name:"Sticks"}, function(e,d) {
  var a = [];
  for(l in d.blocks) {
    a.append(d.blocks[l]);
  }
  blocks.find({oid:a},function (e,b) {
    //do your stuff with the blocks and page here;
  });
});