【发布时间】:2018-10-24 23:33:29
【问题描述】:
我有问题。我是 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');
在此,我为除date 之外的所有字段设置了required:true。然后我在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 版
谢谢。
编辑
感谢所有回复的人,根据下面的一些 cmets,我将 dataStructure.collection.insertOne() 更改为 dataStructure.create(),这似乎包括验证。
【问题讨论】:
-
显示您正在收集数据以获得更完整答案的表格
标签: javascript node.js mongodb mongoose mongoose-schema