Mongo Giving ‘duplicate key error’ en campos no únicos

Recibo un error de MongoDB al intentar insertar un subdocumento. Los subdocs ya tienen _ids únicos, pero se está generando un error para un campo diferente, no único, que no quiero que sea único.

El error en Angular es: “Assets.serial ya existe”. ¿Cómo puedo hacer que este campo contenga valores duplicados y qué hace que el modelo asum que debe ser único?

Aquí está mi modelo de Mangosta:

'use strict'; var mongoose = require('mongoose'), Schema = mongoose.Schema; var AssetUrlSchema = new Schema({ name: { type: String, unique: false, default: '', trim: true }, url: { type: String, unique: false, default: 'http://placehold.it/75x75', trim: true }, }), AssetSchema = new Schema({ serial: { type: Number, unique: false }, urls: { type: [AssetUrlSchema], unique: false, default: [ { name: '', url: 'http://placehold.it/75x75' }, { name: '', url: 'http://placehold.it/75x75' } ] } }), /** * Item Schema */ ItemSchema = new Schema({ name: { type: String, default: '', required: 'Please enter name', trim: true }, assets: { type: [AssetSchema], default: [], unique: false }, property: { type: Schema.ObjectId, zd: 'Please select a property', ref: 'Property' }, created: { type: Date, default: Date.now }, user: { type: Schema.ObjectId, ref: 'User' } }); mongoose.model('Item', ItemSchema); 

Y aquí está mi método de ‘guardar’:

 function(){ var i = 0, assets = []; for (;i < 24;i++) { assets.push({ serial: 1000+i, urls: { name: 'Asset Name ' + i, url: 'http://placehold.it/75x75?' } }); } item = new Items ({ name: 'FPO', property: newPropId, assets: assets }); return item.$save( function(response){ return response; }, function(errorResponse) { $scope.error = errorResponse.data.message; } ); } 

La primera vez que inserto un documento, funciona bien. En cualquier momento posterior, falla con un 400 porque el campo de serial de los activos no es único. Sin embargo, específicamente estoy marcando ese campo como único: falso.

El error en la consola de modo es:

 { [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: mean-dev.items.$assets.serial_1 dup key: { : 1000 }] name: 'MongoError', code: 11000, err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: mean-dev.items.$assets.serial_1 dup key: { : 1000 }' } POST /api/items 400 14.347 ms - 41 

Mongoose no elimina los índices existentes, por lo que deberá eliminar explícitamente el índice para deshacerse de él. En la shell:

 > db.items.dropIndex('assets.serial_1') 

Esto sucederá si inicialmente define ese campo unique: true pero luego lo elimina de la definición de esquema o lo cambia a unique: false .