Igor Azevedo
Igor Azevedo

Reputation: 1185

Nested documents and _id indexes in mongodb

I have a collection with nested documents in it. Each document also has an _id field.

Here's an example of a documents structure

{
   "_id": ObjectId("top_level_doc"),
   "title": "Cadernos",
   "parent": "4fd55bbc5d1709793b000008",
   "criterias": {
     "0": {
       "_id": ObjectId("a_nested_doc"),
       "value": "caderno",
       "operator": "contains",
       "field": "design0" 
    } 
  } 
}

I want to be able to find the nested document just by searching it's _id

With this query

{
    "criterias._id" : ObjectId("a_nested_doc")
}

It returns the parent document (i just want the one that's nested).

Ideally I would do this

{
    "_id" : ObjectId("a_nested_doc")
}

And it would return the document with that id (either its nested or not).

Ps. I edited the "_id" values for the sake of simplicity just for this example.

Upvotes: 1

Views: 1970

Answers (1)

stew
stew

Reputation: 491

You may have to live with selecting criterias._id (without writing a wrapper around the query, at least), but you can select the document itself by simply retrieving a subset of the fields.

http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

// The simplest case converted to your use case
db.collection.find( { criterias._id : ObjectId("a_nested_doc") }, { criterias : 1 } );

Upvotes: 1

Related Questions