2012-05-19 12 views
12

El ejemplo aquí¿Cómo puedo hacer una verificación de tipo en MongoDB?

http://mongoosejs.com/docs/populate.html

proporciona el siguiente código

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: aaron._id 
    }); 

_creator se ha definido anteriormente de la siguiente manera

_creator : { type: Schema.ObjectId, ref: 'Person' } 

Si modifico el código para la siguiente

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: {name: 'test'} 
    }); 

Parece feliz insertar los datos en MongoDB.

{ "title" : "A man who cooked Nintendo", "_creator" : { "name" : "test" }, "_id" : ObjectId("4fb7a55315c5f2de07000002"), "fans" : [ ] } 

¿Cómo puedo detectar el error antes de la inserción? Me gustaría comprobar que no es solo un ObjectId sino también que corresponde a una Persona válida.

Respuesta

20

para continuar lo @JohnnyHK propuso, aquí es una solución completa (suponiendo _creator es una referencia a un identificador numérico).

Si desea comprobar si el valor es un OBJECTID válida

function isObjectId(n) { 
    return mongoose.Types.ObjectId.isValid(n); 
} 

validar: [validador, 'mi tipo de error']

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId } 
+3

esto da 'TypeError: Object función ObjectId (clave, opciones) {SchemaType.call (this, key, options, 'ObjectID'); } tiene ningún método 'isValid'' – Tom

+6

Creo que han cambiado a: 'mongoose.Types.ObjectId.isValid()' – herbyme

+0

Actualizado, gracias @herbyme –

1

Puede agregar la validación al campo _creator del esquema como se describe here.

_creator : { type: Schema.ObjectId, ref: 'Person', validate: ... } 
6

El método isValid no existe (ya?), su mejor apuesta es una expresión regular simple, como se proporciona here

+4

Creo que han cambiado a: 'mongoose.Types.ObjectId.isValid()' – herbyme

Cuestiones relacionadas