style script attribute javascript mongodb object mongoose

javascript - script - title css



Emitir el objeto liso al documento mangosta. (2)

  1. Si recibe una respuesta del servicio REST y dice que tiene un modelo de mangosta de usuario

var User = mongoose.model(''User''); var fields = res.body; //Response JSON var newUser = new User(fields); newUser.save(function(err,resource){ console.log(resource); });

  1. En otro caso, digamos que tiene una matriz de objetos JSON de usuario de User.find () que desea consultar o completar

var query = User.find({}); query.exec(function(users){ //mongoose deep-populate ref docs User.deeppopulate users ''email_id phone_number''.exec({ //query through populated users objects }); });

MongoDB no es compatible con uniones y transferencias. Así que por ahora no puedes lanzar valores a un objeto directamente. Aunque puede trabajar alrededor de forEach.

ACTUALIZACIÓN: se han recibido 5 votos, por lo que he enviado una solicitud de función: https://github.com/LearnBoost/mongoose/issues/2637

Por favor, emita sus +1 votos para que el equipo central sepa que desea esta función.

ACTUALIZACIÓN 2: ver respuesta abajo ...

Digamos que hago una consulta "magra" en una colección O recibo algunos datos de un servicio REST y obtengo una variedad de objetos (no documentos de mangosta).

Estos objetos ya existen en la base de datos, pero necesito convertir algunos / todos esos objetos en documentos de mangosta para editar / guardar individualmente.

He leído la fuente y hay mucha actividad una vez que mangosta tiene datos de la base de datos (poblar, lanzar, inicializar, etc.), pero no parece haber un método para "exponer" esto al mundo exterior.

Estoy usando lo siguiente, pero simplemente parece hacky ( $data es un objeto simple):

// What other properties am I not setting? Is this enough? var doc = new MyModel( $data ); doc.isNew = false; // mimicking mongoose internals // "init" is called internally after a document is loaded from the database // This method is not documented, but seems like the most "proper" way to do this. var doc = new MyModel( undefined ); doc.init( $data );

ACTUALIZACIÓN: Después de más búsquedas, no creo que haya una manera de hacer esto todavía, y el primer método anterior es su mejor apuesta (mangosta v3.8.8). Si alguien más está interesado en esto, haré una solicitud de función para algo como esto (deje un comentario o un voto a favor):

var doc = MyModel.hydrate( $data );


Publicar mi propia respuesta para que esto no quede abierto:

Los modelos de la versión 4 (versión estable publicada el 2015-03-25) ahora exponen un método hydrate() . Ninguno de los campos se marcará como sucio inicialmente, lo que significa que una llamada a save() no hará nada hasta que se mute un campo.

https://github.com/LearnBoost/mongoose/blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657

Es muy importante tener en cuenta que está destinado a ser utilizado para convertir un objeto JS simple cargado desde la base de datos en un documento de mangosta. Si está recibiendo un documento de un servicio REST o algo así, debe usar findById() y update() .

Para aquellos que viven peligrosamente:

Si realmente desea actualizar un documento existente sin tocar la base de datos, supongo que podría llamar a hydrate() , marcar los campos como sucios y luego llamar a save() . Esto no es muy diferente del método de configuración doc.isNew = false; como sugerí en mi pregunta original (excepto que no tiene que marcar los campos como sucios). Sin embargo, Valeri (del equipo de mangosta) sugirió no hacer esto. Podría causar errores de validación (y otros problemas) en ciertos escenarios y generalmente no es una buena práctica.