mongodbmongodb-indexes

Create an Index for a document inside array inside document in MongoDB


Let's say I have this document:

{
  "_id": objectId(),
  "products": [
    {
      "product_id": ""
    }
  ]
}

I would like to make that the key product_id of documents in the array products must be unique for that document in the collection, (i don't want it to affect other documents in the collection).

I tried to use the next command in mongosh console:

db.season.createIndex({products.product_id:1},{unique:true})

But it doesn't work. the console says:

Error: clone(t={}){const r=t.loc||{};return e({loc:new Position("line"in r?r.line:this.loc.line,"column"in r?r.column:...<omitted>...)} could not be cloned.

Solution

  • Unfortunately, that is not possible. The index only works across multiple documents. You can have repeating values within the same document.

    See this.