9

I may have missed this in the mongo index documentation or in the mongoose documentation.

Suppose I have a mongoose schema as such:

const SomeEntity = new Schema({
  foo:  { type: String, required: true },
  bar   { type: Schema.ObjectId, ref: 'Bar' }
});

Should I be creating an index on field bar or would mongo automatically address this?

In other words, does mongo automatically create indexes for ObjectId types ?

dipole_moment
  • 5,266
  • 4
  • 39
  • 55

1 Answers1

15

In other words, does mongo automatically create indexes for ObjectId types ?

No, the only automatic index that MongoDB creates is for the _id field.

However, it depends on the type of queries you're going to run against your model if you need an index for bar.

Since bar refers to the _id field of documents in the bars collection, those documents themselves will be covered by the automatic _id index that will get created on that collection.

But if you need to be able to find documents in the "SomeEntity" collection that refer to a specific bar:

SomeEntity.find({ bar : someBarId })

...then you probably want to create an index for it:

bar: { type: Schema.ObjectId, ref: 'Bar', index : true }
robertklep
  • 198,204
  • 35
  • 394
  • 381