MongoDB 数据库
MongoDB 数据库结构- mongoose 中的一切由 schema 开始。 schema 是一种以文件形式存储的数据库模型骨架,并不具备数据库的操作能力。
- Schema 定义了 model 中的所有属性,而 model 则是对应一个 MongoDB 中的 collection。
- Schema 生成 Model,Model 创造 Entity,Model 和 Entity 都可对数据库操作造成影响,但 Model 比 Entity 更具操作性。
使用 mongoose 连接 MongoDB
连接数据库,实现增、删、改、查操作:
'use strict';
// 引入 mongoose 模块
const mongoose = require('mongoose');
// 定义数据库地址
// uri:mongodb://user:pass@localhost:port/database
const uri = 'mongodb://user:pass@localhost:port/database?authSource=admin';
// 连接 mongoDB 数据库
mongoose.connect(uri, {useNewUrlParser: true});
const db = mongoose.connection;
// 将连接绑定到错误事件
db.on('error', console.error.bind(console, 'MongoDB connection error'));
db.once('open', function() {
console.log('一次打开记录');
});
// 定义 Schema
const Schema = mongoose.Schema;
// 使用 Schema 构造函数,创建一个新的 Schema 实例
// 实例化 mongoose.Schema 对象并定义 Model 的属性
const ArticleScheme = new Schema({
title: String,
author: String,
content: String,
publishTime: Date
});
// 将 Schema 注册成 Model
mongoose.model('Article', ArticleScheme);
// 如果 Model成功注册,就可以通过如下方式访问模型
const ArticleModel = mongoose.model('Article');
// 通过 Model 定义 Entity
var ArticleEntity = new ArticleModel({
title: 'node.js',
author: 'node',
content: 'node.js is great!',
publishTime: new Date()
});
// 【将文档插入到集合中】
ArticleEntity.save(function(err) {
if (err) {
console.log('save failed ' + err);
}else {
console.log('save successed');
}
});
// 【查询】
// find() 方法,查询所有符合要求的数据
// findOne() 方法,查询符号要求的第一条数据
ArticleModel.find({title:'node.js'}, function(err, docs) {
if (err) {
console.log('error');
return;
}
console.log('result: ' + docs); // 打印实体
// 【查询纪录后,修改记录的值】
docs[0].title = 'javascript'; // 修改数据
docs[0].save(); // 保存修改后的数据
// 【删除数据】
if (docs) {
// 遍历文档,逐条删除
docs.forEach(function(ele) {
// 只有单个文档可以使用 remove() 方法
ele.remove();
})
}
})
可以将 Model 提取成单独的一个类:
article.js
'use strict';
// 导入 mongoo 模块
const mongoose = require('mongoose');
// 定义 Schema
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId; // 主键
const ArticleSchema = new Schema({
id: ObjectId,
title: {type: String, required: true, max: 100},
name: {type: String, required: true, max: 100},
date: {type: date}
});
// 导出模型
module.exports = mongoose.model('Article', ArticleSchema);
常见错误
常见错误:连接 MongdDB 数据库时提示字符串参数失效
示例代码“
// 连接 mongoDB 数据库
mongoose.connect(uri, function(err) {
if (err) {
console.log('connect failed' + err);
return;
}
console.log('connect success');
});
错误提示内容:
DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
解决方法:连接时传递参数:
// 连接 mongoDB 数据库
mongoose.connect(uri, {useNewUrlParser: true});
const db = mongoose.connection;
// 将连接绑定到错误事件
db.on('error', console.error.bind(console, 'MongoDB connection error'));
常见错误:连接 MongoDB 数据库时授权失败,提示:errmsg: 'Authentication failed.', code: 18
// uri 后面添加 authDatabase 参数
mongoose.connect('mongodb://user:password@host:port/dbname?authSource=admin')
网友评论