У меня проблема.Я новичок в node.js и mongoDB (используя mongoose).В MySQL, когда я определил таблицу с обязательными полями, база данных откажется принимать входные данные, которые не соответствуют правилам модели.Я заметил, что в mongoDB, по крайней мере, так, как я его настроил, это не так.
Я определил следующую модель в blog-schema.js
:
const mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = mongoose.Schema({
title: {
type:String,
required: true,
},
author: {
type: String,
required: true,
},
category: {
type: String,
required: true,
},
text: {
type: String,
required: true,
},
date: {
type: Date,
default: Date.now,
},
})
module.exports = mongoose.model('BlogPost', userSchema, 'blog');
В этом случае я установил required:true
для всех полей, кроме date
.Затем я реализовал это в conn.js
:
const mongoose = require('mongoose')
, BlogPost = require('./schemata/blog-schema')
, db_config = require('./config')
, uri = 'mongodb://' + db_config.user + ":" + db_config.password + "@" + db_config.host + db_config.database;
DataFunctions = function (){
mongoose.connect(uri, db_config.opts);
mongoose.Promise = global.Promise;
this.connections = {};
this.schemas = {};
this.schemas.BlogPost = BlogPost;
this.connections.db = mongoose.connection;
};
DataFunctions.prototype.insert = function(data = {}, callback = null) {
var schema = this.schemas.BlogPost;
this.connections.db.on('error', console.error.bind(console, 'connection error'));
this.connections.db.once('open', function(dataStructure = schema) {
this.items = data;
if (callback != null) {
dataStructure.collection.insertOne(this.items, callback);
mongoose.connection.close();
}
else {
dataStructure.collection.insertOne(this.items, function(err, docs) {
if (err) throw err;
});
mongoose.connection.close();
}
});
mongoose.connection.close();
}
DataFunctions.prototype.retrieve = function(params = {}, columns = '', callback = null) {
var schema = this.schemas.BlogPost;
this.connections.db.on('error', console.error.bind(console, 'connection error'));
this.connections.db.once('open', function(dataStructure = schema) {
if (callback != null) {
dataStructure.find(params, columns, callback);
}
else {
dataStructure.find(params, columns, function(err, data) {
if (err) throw err;
});
}
});
}
module.exports = DataFunctions;
Однако, когда я выполняю функцию вставки, она принимает ее без ошибок, даже если поля, отмеченные required
, оставлены пустыми.Я был бы очень признателен за помощь в разработке способов проверки данных, вставленных в коллекцию mongoDB.
Я использую версию mongoos 5.3.6 и версию mongoDB 4.0.3
Спасибо.
Редактировать Спасибо всем, кто ответил, основываясь на некоторых комментариях ниже, я изменил dataStructure.collection.insertOne()
на dataStructure.create()
, что, похоже, включает в себя проверку.