Mongoose才是正确答案

mongoose是mongo衍生而来,比mongo更方便,我认为主要是体现在可以将表的信息封装起来

http://www.cnblogs.com/zhongweiv/p/mongoose.html#node_intro

  • 这是比较通俗易懂的教程,但被红莲鄙视了!所以此处写的是从红莲博客中关于mongoose代码领悟到一些皮毛
1
npm install mongoose --save

在当前文件夹中安装依赖

  • 由于是用到了封装,所以需要创建一个文件夹,db,这个文件夹的作用是将和数据库有关的操作都封装好,在以后的程序中就可以直接调用了。

连接到mongo

1
2
3
4
db-config.js
module.exports = {
mongoUri:'mongodb://127.0.0.1/NW'
};
1
2
3
4
5
6
7
connect.js
var mongoose = require('mongoose');
var { mongoUri } = require('./db-config');
mongoose.connect(mongoUri);
module.exports = mongoose;
  • 此处特别需要注意的是在connect.js中加载db-config.js内容的时候必须是要用{ } ,红莲说这是解构还是组构什么的,我理解为这是类似于对象概念。

封装表,生成model,mongoose的精髓!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
schemas.js
var mongoose = require('./connect');
var schemas = {};
schemas.user = mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
default: 'email no set'
},
creat_at: {
type: Date,
default: Date.now
}
});
schemas.detail = mongoose.Schema({
age: {
type: Number,
required: true
},
add: {
type: String,
required: true
},
phone: {
type: String,
reuqired: true
}
});
module.exports = schemas;
  • 此处是调用了mongoose里的Schema生成了两张表的模型,里面是每张表的数据,required: true表示这个数据不可或缺,如果缺了在运行的时候就会报错;default表示如果该项不填会被默认使用default里的东西;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
model.js
var schemas = require('./schemas');
var mongoose = require('./connect');
var schemasNames = Object.keys(schemas);
var models = schemasNames.reduce((acc, name) => {
acc[name + 'Model'] = mongoose.model(
name,
schemas[name]
);
return acc;
}, {});
module.exports = models;
  • mongoose里的另一精华,schemas写的模型通过这里就生成了对应的表的Model,但红莲写法有点跳,目前还是一知半解,最后生成了”xxxModel”

入口

1
2
3
4
index.js
var models = require('./models');
module.exports = models;

  • 因为封装在一个文件夹里,当其他地方调用的时候直接调用文件夹,编译器会默认调用到index.js

调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
insert.js
var {userModel} = require('./db');
var {detailModel} = require('./db');
var data = new userModel({
name: 'Lin',
email: '1019022357@qq.com'
});
var detail = new detailModel({
age: 19,
add: '广东水上乐园'
});
data.save().then(suc =>{
console.log('success');
}, err => {
console.log('fail');
});
detail.save().then(suc =>{
console.log('success');
}, err => {
console.log('fail');
});

  • 切记在引用的时候要带{ },不带是真的会吃屎的!!then是ES6的写法,和回调等价,增删改查写法类似

我觉得mongoose和mongo的最大区别是mongoose把数据库那一堆东西都封装了起来,调用的时候可以更快更方便!

缺少实践,所以只领悟了些皮毛,以下是红莲博客

https://eczn.coding.me/blogs/15e6b589cb8/