mangusta applica l’attributo univoco alla proprietà del documento secondario

Non posso dire perché l’attributo unico non è convalidato in questi casi

var UserSchema = new mongoose.Schema({ name: { type: String}, email: { type: String, unique: true, required: true }, }); var CustomerSchema = new mongoose.Schema({ name: { type: String, unique: true, required: true }, users:[UserSchema], }); 

Quando spingo un nuovo utente nella matrice degli utenti del cliente, posso aggiungere lo stesso utente con la stessa proprietà email senza generare l’errore duplicato che mi aspetterei.

attributo richiesto aumenta l’errore se la proprietà vale non è fornita ma unica non lo è

È questo il comportamento previsto?

per esempio:

 var customer = new Customer(); customer.name = 'customer_name'; customer.save(...); for(var i = 0; i < 10; i++){ var user = new User(); user.email = '[email protected]'; customer.users.push(user); customer.save(...); } 

La documentazione di MongoDB spiega:

Il vincolo univoco si applica ai documenti separati nella raccolta. Cioè, l’indice univoco impedisce ai documenti separati di avere lo stesso valore per la chiave indicizzata, ma l’indice non impedisce a un documento di avere più elementi o documenti incorporati in una matrice indicizzata da avere lo stesso valore.

Poiché si tratta di documenti incorporati, non è ansible applicare l’unicità su una proprietà all’interno della matrice di documenti incorporati dello stesso documento principale.

Tuttavia, quando successivamente provi ad inserire un nuovo Customer con un utente che ha anche [email protected] come indirizzo di posta elettronica, si verificherà un errore (ma solo durante il salvataggio, non quando si utilizza .push() , poiché l’univocità è applicato da MongoDB, non Mongoose).