Nodejs/мангуст. какой подход предпочтительнее для создания документа?
Я нашел два подхода для создания нового документа в nodejs, когда я работаю с mongoose.
Первый:
var instance = new MyModel();
instance.key = 'hello';
instance.save(function (err) {
//
});
Второй
MyModel.create({key: 'hello'}, function (err) {
//
});
Есть ли разница?
Ответы
Ответ 1
Да, основное отличие заключается в способности выполнять вычисления до того, как вы сохраните или как реакцию на информацию, которая появляется при создании новой модели. Самый распространенный пример - убедиться, что модель действительна, прежде чем пытаться ее сохранить. Некоторые другие примеры могут создавать любые отсутствующие отношения перед сохранением, значения, которые нужно рассчитывать "на лету" на основе других атрибутов, и модели, которые должны существовать, но потенциально никогда не могут быть сохранены в базе данных (прерванные транзакции).
Итак, в качестве базового примера некоторых вещей, которые вы могли бы сделать:
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) {
//
});
Ответ 2
Этот код предназначен для сохранения массива документов в базу данных:
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)' разрешить создание коллекции с именем модели и выполнить метод .save()
только для документа в массиве.
Кроме того, вы можете сохранить только один документ следующим образом:
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)
});
Ответ 3
Я предпочитаю простой пример с предопределенными значениями пользователя и проверкой модели.
// Create new user.
let newUser = {
username: req.body.username,
password: passwordHashed,
salt: salt,
authorisationKey: authCode
};
// From require('UserModel');
return ModelUser.create(newUser);
Затем вы должны использовать валидаторы в классе модели (поскольку это можно использовать в других местах, это поможет уменьшить ошибки/ускорить разработку)
// Save user but perform checks first.
gameScheme.post('pre', function(userObj, next) {
// Do some validation.
});