mongoose学习笔记1之迅速开始

学习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/,就能看的如下结果。

WechatIMG1055.jpeg

如果终端出现 -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。

WechatIMG1056.jpeg


安装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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容