发表于 2015-7-9 10:36:46

Nosql数据库教程之初探MongoDB

  日期:2012/01/16来源:GBin1.com
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/title.jpg
  大家都听说过nosql解决方案吧?现在是web开发中很流行的技术。 是不是也有听说过MongoDB? 你是不是准备好了来学习一下web开发中最酷的技术之一MongoDB?
  在这个系列教程中,我们将介绍帮助大家了解MongoDB,让大家能够像Mysql一样熟练的应用MongoDB到web开发中去。 希望大家喜欢!

为什么使用MongoDB?
  在面对对象的开发过程中,我们都被鼓励尝试将逻辑的模型应用到代码开发中去,因此我们使得代码在概念上更加容易理解。当我们需要这样做的时候,我们最好能够清晰的看到逻辑操作的互动及其信息的处理。
  那么假设如果你可以将需要使用的程序化模型直接保存的话呢?如果你可以直接保存它们而不需要保存数据库中表里面的一行一行数据呢? 学习MongoDB,你就可以实现这个功能!
  在这个教程中,我们将学习基本的MongoDB,例如,创建,更新和删除数据库和记录,执行复杂的查询并且使用MapReduce来执行初级的数据挖掘。那么废话不说,我们现在开始!

步骤一:安装Mongo
  我们需要在这个地址下载MongoDB。
  在这个地址中我们需要寻找支持你的平台和架构的安装,我的操作系统是win7,这里下载使用的是2.0.2 for Windows 64-bit。 (GBin1友情提醒:注意大家不要下载nightly build,因为它们可能不稳定)
  直接解压安装完毕后,请创建一个数据库文件夹,这里我创建在C:\WS-GBIN1\mongodb\data\db
  然后运行数据库启动命令如下:

mongod --dbpath C:\WS-GBIN1\mongodb\data\db
  这个时候会在C:\WS-GBIN1\mongodb\data\db目录下创建Mongdb相关文件。
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/1.jpg
  
  然后,请运行命令行 cmd。, 然后找到你安装的Mongodb目录下的bin目录,运行如下命令:

mongo
  你可以看到如下的界面:
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/2.jpg
  如果你看到以上的窗口内容,我们已近安装完毕,准备开始学习MongoDB!
  命令行说明:
组件
bin/mongod - The database process.
bin/mongos - Sharding controller.
bin/mongo- The database shell (uses interactive javascript).
工具
bin/mongodump         - MongoDB dump tool - for backups, snapshots, etc..
bin/mongorestore      - MongoDB restore a dump
bin/mongoexport       - Export a single collection to test (JSON, CSV)
bin/mongoimport       - Import from JSON or CSV
bin/mongofiles      - Utility for putting and getting files from MongoDB GridFS
bin/mongostat         - Show performance statistics

步骤二: 创建一个数据库并且插入记录
  初始化后,没有数据库创建。没关系只要我们插入记录,它会立刻自己创建。拷贝如下内容到命令行窗口:

db.gbin1.insert({
    first: 'matthew',
    last: 'setter',
    dob: '21/04/1978',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'developer',
    nationality: 'australian'
});
db.gbin1.insert({
    first: 'james',
    last: 'caan',
    dob: '26/03/1940',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.gbin1.insert({
    first: 'arnold',
    last: 'schwarzenegger',
    dob: '03/06/1925',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.gbin1.insert({
    first: 'tony',
    last: 'curtis',
    dob: '21/04/1978',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'developer',
    nationality: 'american'
});
db.gbin1.insert({
    first: 'jamie lee',
    last: 'curtis',
    dob: '22/11/1958',
    gender: 'f',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.gbin1.insert({
    first: 'michael',
    last: 'caine',
    dob: '14/03/1933',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'english'
});
db.gbin1.insert({
    first: 'judi',
    last: 'dench',
    dob: '09/12/1934',
    gender: 'f',
    hair_colour: 'white',
    occupation: 'actress',
    nationality: 'english'
});
  没问题的话,我们确认一下数据库内容,使用如下命令:

db.gbin1.find()
  将看到如下内容:
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/3.jpg
  以上代码中显示了所有我们创建的记录,需要提醒大家的是id字段。如果你不指定ID的话,mongodb自动为你生成。这是一个唯一标示。
  你可以看到我们插入的所有记录,现在我们准备查询。

步骤三:搜索记录
  你记得前面的命令吧? 它查询返回了所有的记录。如果你要查询指定的内容呢? 回答是使用selector。
  Selectors
  Selector是对于mongo来说类似sql中使用的where语句。它允许我们执行如下操作:


[*]指定必须匹配,类似, AND语句
[*]指定可选匹配,类似, OR语句
[*]指定必须存在
[*]等等...
  必须匹配的记录
  比方说,我们需要找到所有的女性,使用如下命令:

db.gbin1.find({gender: 'f'});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/4.jpg
  查询所有的男性呢? 很简答,如下:

db.gbin1.find({gender: 'm'});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/5.jpg
  多条件查询
  下面语句将查询男性演员或者国籍是english

db.gbin1.find({gender: 'm', $or: [{nationality: 'english'}]});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/6.jpg
  如果需要知道国籍为english或者american呢? 很简单,如下:

db.gbin1.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/7.jpg

步骤四:记录排序
  使用Mongo我们需要使用sort命令来执行排序。和find命令类似,使用不同选项来设定不同排序结果
  和SQL不一样,我们这里升序和降序的关键字不同, 我们使用如下:
  升序: -1
降序: 1
  这里是一个例子:

db.gbin1.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1});
  以上命令将返回所有的男性,国籍为english或者american,并且使用国籍的降序排列。
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/8.jpg
  那么如何使得国籍降序,而名字使用升序排列呢? 如下:

db.gbin1.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1, first: 1});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/9.jpg
  你可以看到Arnold Schwarzenegger在Tony Curtis后面出现
  限制返回记录
  如果是一个非常大的数据集,我们想限制结果为2,怎么执行? Mongo提供了limit命令,类似MYSQL允许我们执行限制操作。我们使用上面的查询,但是只返回2个记录。如下:

db.gbin1.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2);
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/10.jpg
  如果我们希望取得第三个或者第四个记录,忽略前面俩个呢? 如下:
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/11.jpg.
  你将看到头俩个被忽略了。

步骤六:更新记录
  Mongo同时也提供了记录更新选项。使用find方法来查询需要更新的记录,然后执行更新。
  比如我们需要更新James Caan的记录,指定头发颜色是灰色,不是褐色。那么我们执行如下:

db.gbin1.update({first: 'james', last: 'caan'}, {$set: {hair_colour: 'brown'}});
  以上代码执行后,不会有任何的成功和失败的提示。你需要使用如下命令来查看更新:

db.gbin1.find({first: 'james', last: 'caan'});
http://www.gbin1.com/technology/javautilities/20120116gettingstartedwithmongodbpart1/12.jpg
  以上图片中我们看到了更新

步骤七: 删除记录
  如果你需要删除一个记录,你需要指定一些selector,否则你会删除全部记录。
  例如我们需要删除James Caan。使用如下命令:

db.gbin1.remove({first: 'james', last: 'caan'});
  和更新一样,没有任何提示成功与否。你需要自己查看。

db.gbin1.find({first: 'james', last: 'caan'});
  以上应该没有记录返回。如果没有返回记录,说明这个记录已经被删除。 如何删除所有记录呢?

db.gbin1.remove();
db.gbin1.find();
  运行以上你将什么记录都看不到了

总结:
  今天我们介绍了Mongodb是什么,为什么需要Mongodb,如何安装, 如何增删查改。如果你需要了解更多,请访问mongodb主站!
下一个教程,我们将介绍如何执行复杂的查询。 希望大家继续关注我们!
  相关文章: Nosql数据库教程之初探MongoDB - 第二部分
  来源:Nosql数据库教程之初探MongoDB - 第一部分
页: [1]
查看完整版本: Nosql数据库教程之初探MongoDB