2012-02-16 13 views

Odpowiedz

36

Tak, główną różnicą jest możliwość wykonywania obliczeń przed zapisaniem lub jako reakcja na informacje pojawiające się podczas budowania nowego modelu. Najpopularniejszym przykładem jest upewnienie się, że model jest ważny przed próbą zapisania go. Niektóre inne przykłady mogą tworzyć brakujące relacje przed zapisaniem, wartości, które muszą być obliczane w locie w oparciu o inne atrybuty i modele, które muszą istnieć, ale potencjalnie nigdy nie mogą być zapisane w bazie danych (przerywane transakcje).

Więc jako podstawowy przykład niektóre rzeczy można zrobić:

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) { 
    // 
}); 
+4

Dzięki, miłe wyjaśnienie :) –

+0

Poza tym musisz wygenerować identyfikator samodzielnie. mongoose.Types.ObjectId() jest formatem _id. –

+0

Co zrobić z asynchronizacją i synchronizacją, czy obie operacje są synchroniczne? – JohnnyQ

0

Wolę prosty przykład z predefiniowanych wartości użytkowników i sprawdzanie poprawności modelu stronie.

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

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

Następnie należy za pomocą walidatorów w klasie modelu (Ponieważ ten może być używany w innych miejscach, to pomoże zmniejszyć liczbę błędów/przyspieszyć rozwój)

// Save user but perform checks first. 
gameScheme.post('pre', function(userObj, next) { 
    // Do some validation. 
}); 
3

Ten kod służy do zapisywania tablica dokumentów do bazy danych:

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)” pozwolenie, które tworzą kolekcję z nazwą modelu i wykonać .save() metoda tylko dokumentu w tablicy.

Alternatywnie, można zapisać tylko jeden dokument, w ten sposób:

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) 

});

Powiązane problemy