Entonces, tengo el siguiente esquema:
const Players = new mongoose.Schema({ discordID: { type: String, unique: true, required: function () { return typeof this.discordID !== "string" && this.discordID !== null } }) Mi punto es hacer que discordID sea único, pero solo si no es null o "" .
Escuché sobre disperso, pero no parece funcionar como yo quiero. Recibo errores de duplicación cada vez que intento insertar más de 2 documentos con discordID establecido en null (probé sparse: true e index: {sparse: true, unique: true} ).
¿Hay algo que pueda hacer? Quiero mantener esta validación en el nivel de esquema si solo es posible.
Los índices dispersos funcionan para documentos que omiten la clave. El discordID requerido se incluye y se establece en null , que se pasa al almacén de datos.
https://docs.mongodb.com/manual/core/index-sparse/
Los índices dispersos solo contienen entradas para documentos que tienen el campo indexado, incluso si el campo de índice contiene un valor nulo. El índice salta cualquier documento al que le falte el campo indexado.
Configure los campos como undefined en mongoose para que se eliminen antes de guardar.