Mongoose _id afectado antes de guardar

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var Cat = mongoose.model('Cat', { name: String }); var kitty = new Cat({ name: 'Zildjian' }); console.log(kitty); kitty.save(); console.log(kitty); 

esta salida:

{ name: 'Zildjian', _id: 523194d562b0455801000001 } dos veces

Lo he intentado retrasando el guardado después de un tiempo de espera, pero es lo mismo, lo que apunta a que _id está configurado en el new Cat y no en el .save()

¿Esto se debe a mongodb o a la mongoose, por qué el _id se establece antes de la persistencia real?

La mayoría de los controladores MongoDb generarán automáticamente el lado del cliente ObjectId / _id , incluido el controlador nativo para Node.js. Hay una pequeña cantidad de locking que se produce para generar un ID único, así que hay pocas razones para no distribuir la generación a los clientes conectados.

Mongoose necesita un identificador único para rastrear y hacer referencia a objetos, por lo que crea un identificador de inmediato.

En el cliente Node.JS, puede configurar opcionalmente , por ejemplo, la propiedad forceServerObjectId en true para controlar este comportamiento.

Sin embargo, esto no se puede anular cuando se utiliza Mongoose según la documentación :

Mongoose fuerza la opción db forceServerObjectId false y no se puede anular. Mongoose establece por defecto las opciones de auto_reconnect del servidor en true, que pueden ser anuladas. Consulte la instancia del controlador nativo de node-mongodb para ver las opciones que entiende.