Mangosta crear _id de otros campos

Sé que Mangosta rellena el campo _id automáticamente con un ObjectID si ninguno es dado y que puede sobrescribir el _id cuando la construcción y la instancia del modelo.

Lo que quiero: crear el _id de otros campos, de una manera transparente. Quiero omitir el campo _id cuando se crea una instancia de la modelo y, a continuación, tienen una función llamada que lo llena. Esta función debe ser declarada en un nivel de Esquema y quien utiliza el modelo no saben que _id fue llenado por la función en lugar de la Mangosta.

Hay un gancho o un parámetro del Esquema constructor que me perdí?

Mangosta 3.0.x

Vamos a concretar más. Imagina un BlogPost y quiero crear agradable direcciones Url de slugging el título. Con el fin de asignar el slug a un Mongo Objeto de hash de la babosa y convertirlo en un ObjectID para aprovechar sus beneficios. Ahora lo que estoy buscando es un método transparente que me permite crear una instancia de BlogPost por sólo pasa en title y tienen la slug y _id propiedad generado automáticamente.

InformationsquelleAutor Prinzhorn | 2012-08-31

2 Kommentare

  1. 5

    utilizar un setter en title que slugifies y idifies para usted: https://gist.github.com/3658511

    Si usted quiere asegurarse de que su código sólo se ejecuta una vez creado el objeto, de verificación para this.isNew en el interior de la incubadora.

    • Me respondió en GH así. Suena agradable al principio, pero el setter es llamado cada vez, pero necesito solamente una vez (eso es importante).
  2. 2

    ¿Es esto lo que buscas?

    Puede definir una función para crear el _id antes de que el modelo se guarda, como en:
    http://mongoosejs.com/docs/middleware.html

    Si este middleware es llamado después de la Mangosta crea el _id por defecto (supongo que no), se podría decir que la Mangosta para no crear una _id, con el _id opción.
    http://mongoosejs.com/docs/guide.html#options

    • Así, uno de los problemas es la falta de documentación para la init evento (clic en la primera de sus enlaces)
    • Usted no debe necesitar el evento init : sólo tiene que utilizar el «pre» middleware. mongoosejs.com/docs/api.html#schema_Schema-pre
    • Sí, pero ¿dónde está el docu para pre(‘init’)? Hace fuego cuando el contructor es llamada o cuando el Esquema es listo o lo que sea?
    • Busque en la sección «eventos» para el enlace de arriba, a pesar de que mi conjetura es que usted también puede hacer lo que quiera con el guardar el evento.
    • init parece inapropiado porque necesito esto para cada instancia del modelo. save puede estar bien, pero aún no es perfecto, porque es emitida cuando se actualiza el documento. Yo tendría que realizar otra comprobación para asegurarse de que sólo a hacer cosas en la primera guardar.
    • La verificación guardar sería muy ligero, ya que está sucediendo en el cliente.
    • el método init es privado, que es lo que causa que el enlace no funciona bien. Haga clic en la pequeña «privado» casilla de verificación en la parte inferior de la página para ver todos los métodos privados. El método init es llamado internall después de que un documento se devuelve desde la db.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea