Pregunta

He encontrado dos enfoques para crear un nuevo documento en NodeJS cuando trabajo con Mongoose.

Primero:

var instance = new MyModel();
instance.key = 'hello';
instance.save(function (err) {
  //
});

Segundo

MyModel.create({key: 'hello'}, function (err) {
  //
});

¿Hay alguna diferencia?

¿Fue útil?

Solución

Sí, la principal diferencia es la capacidad de hacer cálculos antes de guardar o como reacción a la información que surge mientras crea su nuevo modelo. El ejemplo más común sería asegurarse de que el modelo sea válido antes de intentar guardarlo. Algunos otros ejemplos podrían ser crear relaciones faltantes antes de ahorrar, valores que deben calcularse sobre la mosca en función de otros atributos y modelos que deben existir pero que potencialmente nunca podrían guardar en la base de datos (transacciones abortadas).

Entonces, como ejemplo básico de algunas de las cosas que podría hacer:

var instance = new MyModel();

// Validating
assert(!instance.errors.length);

// Attributes dependent on other fields
instance.foo = (instance.bar) ? 'bar' : 'foo';

// Create missing associations
AuthorModel.find({ name: 'Johnny McAwesome' }, function (err, docs) {
  if (!docs.length) {
     // ... Create the missing object
  }
});

// Ditch the model on abort without hitting the database.
if(abort) {
  delete instance;
}

instance.save(function (err) {
  //
});

Otros consejos

Este código es para guardar una variedad de documentos en la base de datos:

app.get("/api/setupTodos", function (req, res) {

var nameModel = mongoose.model("nameModel", yourSchema);
//create an array of documents
var listDocuments= [
    {
        username: "test",
        todo: "Buy milk",
        isDone: true,
        hasAttachment: false
    },
    {
        username: "test",
        todo: "Feed dog",
        isDone: false,
        hasAttachment: false
    },
    {
        username: "test",
        todo: "Learn Node",
        isDone: false,
        hasAttachment: false
    }
];

nameModel.create(listDocuments, function (err, results) {

    res.send(results);
});

'Namemodel.Create (ListDocuments)' Permitir que cree una colección con el nombre del modelo y ejecute .save() Método para solo documentar en la matriz.

Alternativamente, puede guardar un documento solo de esta manera:

var myModule= mongoose.model("nameModel", yourSchema);

    var firstDocument = myModule({
      name: String,
surname: String
    });

firstDocument.save(function(err, result) {
  if(if err) throw err;
  res.send(result)

});

Prefiero un ejemplo fácil con los valores de usuario predefinidos y el lado del modelo de verificación de validación.

   // Create new user.
   let newUser = {
       username: req.body.username,
       password: passwordHashed,
       salt: salt,
       authorisationKey: authCode
   };

   // From require('UserModel');
   return ModelUser.create(newUser);

Entonces debería usar validadores en la clase de modelo (porque esto se puede usar en otras ubicaciones, esto ayudará a reducir los errores/desarrollo de aceleración)

// Save user but perform checks first.
gameScheme.post('pre', function(userObj, next) {
    // Do some validation.
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top