2011-07-05 11 views
101

¿Existe una función para convertir una cadena en un Id de objeto en nodo utilizando mangosta? El esquema especifica que algo es un ObjectId, pero cuando se guarda de una cadena, mongo me dice que todavía es solo una cadena. El _id del objeto, por ejemplo, se visualiza como objectId("blah").Node.js Cadena de Mongoose.js a la función ObjectId

Respuesta

260

Puede hacerlo de esta manera:

var mongoose = require('mongoose'); 
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003'); 
+0

Sí, eso es un poco más limpio en este caso. Solo puede necesitar usar el mongo.BSONPure si lo hace fromTime() – talentedmrjones

+3

¿Esto arroja un error si es una cadena no válida? Buscando la mejor forma de hacer la validación de entrada en una API REST para los campos de id mongo. – Zambonilli

+1

De hecho, arroja un error. – Zambonilli

10

Puede hacerlo de esta manera:

var mongoose = require('mongoose'); 
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001"); 

EDIT: Nueva norma ha fromHexString en lugar de fromstring

+1

Bueno, aún más "nuevo" estándar es parece estar mongoose.mongo.BSONPure.ObjectID.createFromHexString() (a partir de la mangosta 3.9.7) – Evereq

+1

Para aquellos que están intentando hacer esto, esta es una respuesta mucho mejor que la respuesta seleccionada, ya que no transformará la identificación si ya está usando una id de mongo. – ed209

+1

Esto ya no funciona, use la respuesta aceptada en su lugar – paper1111

5

A juzgar por los comentarios, que está buscando:

mongoose.mongo.BSONPure.ObjectID.isValid 

O

mongoose.Types.ObjectId.isValid 
2
var mongoose = require('mongoose'); 
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001"); 
+0

Esto es exactamente lo mismo que la respuesta aceptada –

+1

¿Podría comentar sobre la diferencia entre 'mongoose.Types.ObjectId' y' mongoose.mongo.ObjectId'? Las propiedades del objeto de la mangosta son diferentes, pero pueden estar haciendo referencia al mismo método debajo. Comente sobre los métodos subyacentes en 'Types' vs' mongo'. – steampowered

2

no podía resolver este método (la verdad es que no me busco larga)

mongoose.mongo.BSONPure.ObjectID.fromHexString 

Si el esquema espera que la propiedad sea del tipo OBJECTID, la la conversión es implícita, al menos este parece ser el caso en 4.7.8.

Se podría utilizar algo como esto, sin embargo, lo que da un poco más a la flexión:

function toObjectId(ids) { 

    if (ids.constructor === Array) { 
     return ids.map(mongoose.Types.ObjectId); 
    } 

    return mongoose.Types.ObjectId(ids); 
} 
Cuestiones relacionadas