学习mongoose之前,需要先安装好,mongodb和node.js
mongodb简介(引自菜鸟教程)
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
安装mongodb。我选择使用brew安装(我用的是mac)
如果你未安装brew,请在终端使用如下命令:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
当brew安装完成后,你需要先更新一下
brew update
更新过程可能很漫长,啥动静都没有,请耐心等待。
更新完之后,你就可以安装mongodb了。在终端的命令如下:
brew install mongodb
安装完成后,会提示你启动Mongodb的方法,此时你在终端输入如下命令行:
mongod --config /usr/local/etc/mongod.conf
如果此时没反应,那么就说明你启动成功了。你可以在浏览器中输入http://localhost:27017/,就能看的如下结果。
如果终端出现 -bash: mongod: command not found
可以用如下代码解决
export PATH="$PATH:/usr/local/opt/mongodb/bin"
其中$PATH后面代表的是你mongodb安装的路径。如果你是用brew安装,那就是这个路径。
然后进入/usr/local/opt/mongodb/bin目录,执行如下命令
./mongo
如果启动时出现其他错误,你或许需要使用如下命令,建立mongdb的存储文件夹
mkdir -p /data/db
如果还不行,就谷歌吧。
如果关闭mongodb数据库后,重启不了。那就到/usr/local/opt/mongodb/bin目录执行
./mongod --repair
然后重启mongod
mongod --config /usr/local/etc/mongod.conf
安装mongoose可视化工具
我推荐工具Robomongo
下载地址。然后安装。在mac下,系统不会允许你安装不受信任的app,请在设置-安全与隐私中选择任何来源。然后就可以安装了。
如果你已经启动了mongodb,那么打开使用Robomongo连接localhost:27017。
安装node.js
点击安装教程
准备工作做好了,接下来开始mongoose之旅。
快速开始mongoose
接下来使用命令行安装mongoose (npm使用介绍)
npm install mongoose
我喜欢猫,我想要将我遇到的每一只猫记录到mongodb中。首先,需要在我们的项目中包含mongoose,然后连接test-我们运行在本地的MongoDB实例数据库。
在项目中创建 getting-started.js。
// getting-started.js <em>连接数据库</em>
let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
现在我们已经尝试连接了本地的测试数据库。我们需要在连接数据库成功或连接失败的时候得到通知。
let db = mongoose.connection;
db.on('error',()=>{
console.error('连接失败');
});
db.once('open', function () {
//回调函数
});
一旦我们链接成功,我们的回调函数将被调用。为了简洁,我们假定接下来的所有代码都在这个回调函数内。
在Mongoose中,一切都是从Schema(模式)而来。接下来,我们将定义我们的猫。
let kittySchema = mongoose.Schema({
name:String
});
到目前还好,我们已经得到了一个模式,带有一个属性name,name是一个字符串。接下来,我们将把我们的模式编译成模型。
let Kitten = mongoose.model('Kitten',kittySchema);
一个模型是我们构造文档的一个类(文档是MongoDB中数据的基本单元,非常类似于,关系型数据库管理系统中的行)。既然这样,每个文档就是一只猫,这只猫上带有我们在模式中已经定义好的属性和行为。接下来,让我们创建一只猫的文档。
let silence = new Kitten({name:"silence"});
猫会叫,那么让我们看一看如何添加“speak"的功能到我们的文档。
//注意:方法必须添加在模式被编译为模型之前。
kittySchema.methods.speak = function(){
let greeting = this.name?'Memo name is '+this.name:"I don't have a name";
console.log(greeting);
}
//添加在下面代码之前
let Kitten = mongoose.model('Kitten',kittySchema);
//此时将模式编译成模型时,会把模式功能方法属性加入到模型的原型中,然后暴露在每个文档实例,即这里的Kitten实例。
加入了speak功能后,我们的猫就会叫了。
silence.speak();//控制台输出 Memo name is silence
我们有了会说话的猫,但是我们还有保存任何东西到数据库中。每个文档都可以使用save方法保存到数据库中。无论发生什么事情,save方法的第一个参数都是error。
silence.save(function(err,silence){
if(err){
return console.log(err);
}else{
console.log('保存成功');
}
});
随着时间的流逝,我们想要看看我们之前存在数据库中的猫,我们可以通过 Kitten模型读取所有小猫的文档。
Kitten.find({name:'silence'},function(err,target){
if(err){
console.error(err);
}else{
console.log(target);
}
});
上述代码的意思是,查找一个名字为‘silence'的猫。find的回调函数的第一个参数永远是error。target表示我们查找的对象。
如果你想找到所有小猫的记录,你可以去掉查找条件。
Kitten.find(function(err,target){
if(err){
console.error(err);
}else{
console.log(target);
}
});
你可以用正则查询
Kitten.find({ name: /^Fluff/ }, callback)