ORM介绍
ORM的全称是Object Relational Mapping,即对象关系映射。它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将这些对象组织起来,实现系统业务逻辑的过程。
Mongodb介绍
Mongodb与关系型数据库的对应关系图
Mongoose介绍
Mongoose是一个提供了与MongoDB相映射的Node.js库,它在Node.js中与ORM(Object Relational Mapping)有着类似的接口。
即:Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。
Mongoose在后端开发的应用
【1】 先建立一个mongodb.js. 目的是用mongoose连接mongodb数据库,导出连接了该数据库的mongoose对象
对exports的理解,exports.xx代表的是 当我require后赋给一个var后,可以用var_name.xx的形式去调用它.
var mongoose = require('mongoose');
//connect the database of mongo
mongoose.connect('mongodb://localhost:27017/test1_carflow');
exports.mongoose = mongoose;
【2】 Flow.js, 用来生成Schema和Model,以及我们的save函数
这个save函数内部是用model的save方法实现的,我们调用的时候传入obj(json),生成对应的model。
module.export和export的区别
//写法1
exports.hello = function(){
console.log(‘world’);
}
//写法2
var f = {
//'hello' is the function's name
hello : function(){
console.log(‘world’);
}
}
module.exports = f;
假设我们写的这个模块的文件名为hello.js,执行下面的代码, 上面两种效果一样
var h = require(‘hello’);
h.hello();
如果此模块是一个类,就应该直接赋值module.exports,这样调用者就是一个类构造器,可以直接new实例
【3】使用的时候先生成Json对象,再调用Flow.js的函数
RoboMongo工具
mongodb可视化工具,mongod启动后,用数据库名进行搜索连接。
效果如图
对Mongoose的思考(24/06/2017更新)
一直很纳闷的就是Mongodb最大的特点之一就是同个表(collection)下不同document可以有不同的数据存储类型和数量,但是Mongoose的Schema和Model的创建就是结构化,就跟Mysql这些关系型数据库一样了!所以网上也有人看法是Mongoose也是给传统数据库开发者提供一个过渡。
所以为了schemaless,Mongoose提供了一种Schema.Type——混合模型
Schema.Types.Mixed是Mongoose定义个混合类型,该混合类型如果未定义具体形式。因此,如果定义具体内容,就直接使用{}来定义,以下两句等价
var AnySchema = new Schema({any:{}}); var AnySchema = new Schema({any:Schema.Types.Mixed});
混合类型因为没有特定约束,因此可以任意修改,一旦修改了原型,则必须调用markModified()
person.anything = {x:[3,4,{y:'change'}]} person.markModified('anything');//传入anything,表示该属性类型发生变化 person.save();
错误:未结束的字符串常量(05/07/2017更新)
今天运行用来存储用户数据的init_user.js文件失败,弹出这样的错误
解决办法就是复制代码重新运行就行了。
Reference
区别:exports&module.exports
http://www.ghostchina.com/module-exports-and-exports-in-node-js/
基本概念: require, exports
https://github.com/pzxwhc/MineKnowContainer/issues/39
mongoose, js object, json, json string(25/07/2017更新)
var docu_data = new pData.ParkingModel(jo_data);
上面代码是Mongoose利用Model新建一个Document实例
jo_data的类型是object,那么问题来了,object必须要json object吗?
我发现不是,在Schema确立的情况下,只要是object就可以,就是说{name: "frank"}跟{"name": "frank"}都没问题。
附:跟json有关常用方法:
- JSON.stringfy(); //JS object to json string
JSON.stringify({ x: 5 }); // '{"x":5}'
- JSON.parse(); //json string to JS object
JSON.parse('{"x":5}'); //{x: 5}