mongodb - rosa - Validación de la singularidad de un documento incrustado delimitado por su padre en mangosta
salsoteca mangosta (2)
Como descubriste, agregar un índice único a un campo de una matriz no impone la exclusividad dentro de la matriz, asegura que no hay dos documentos en la colección que contengan el mismo valor de campo en la matriz.
En su lugar, observe el operador de matriz $addToSet
como una forma de agregar atómicamente un valor a una matriz solo si no está ya en la matriz.
Tengo el siguiente esquema en mangosta:
UserSchema = new Schema
username: {type: String, required: true}
GameSchema = new Schema
identifier: String
users: [UserSchema]
Quiero asegurarme de que cada usuario de un juego tenga un nombre de usuario único. Sin embargo, si agrego
unique: true
a la definición de nombre de usuario, entonces parece imponer la singularidad en todos los juegos, no solo dentro del juego en que reside el usuario. Además, si tengo más de 1 juego sin usuarios, aparece el siguiente error:
games.$users.username_1 dup key: { : null }
Traté de agregar un validador personalizado al campo de nombre de usuario para verificar manualmente si ese nombre de usuario ya está dentro del alcance del juego principal, pero en mangosta la función de validador solo recibe la cadena real del nombre de usuario, así que no tengo ninguna manera de verificar que el nombre de usuario sea único dentro del juego porque no puedo obtener una referencia al documento del juego principal en la función de validación.
¿Hay alguna manera de lograr este tipo de validación en la mangosta?
Esto se logra fácilmente haciendo:
doc.array.addToSet(4,5);
Puedes eliminarlos haciendo:
doc.array.pull(4,5);
doc.array.remove(4,5); //alias of .pull()
http://mongoosejs.com/docs/api.html#types_array_MongooseArray-addToSet http://mongoosejs.com/docs/api.html#types_array_MongooseArray-pull