`
gaozzsoft
  • 浏览: 424781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

MongoDB的使用-主流NOSQL数据库之MongoDB快速入门

 
阅读更多

目前,NOSQL在业界正发展的如火如荼,其中Mongodb是其中十分优秀的一员,MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。在本系列教程中,将分三部分指导对Mongodb的学习,在第一部分中,将简单介绍Mongodb的安装和基本使用方法,在第二部分中,将介绍Java对Mongodb的编程操作,在第三部分中,将介绍Spring对Mongodb的编程操作。

  Mongodb在Windows上的安装

  首先,我们到Mongodb的官方网站http://www.mongodb.org/downloads下载,下载的版本目前是1.8.1,下载后,解压到文件夹,比如C:\mongodb-win32-1.8.1。接下来,我们可以观察下,该文件夹下有如下文件:

主流NOSQL数据库之MongoDB快速入门

  可以看到,mongodb可谓十分简单,只有10个文件。接下来,我们创建一个数据库文件存放的目录,这里设定为c:\mymongodb。然后可以在命令行方式下启动mongodb了,运行如下命令:

C:\mongodb-win32-1.8.1\bin>mongod --dbpath "c:\mymongodb"
当出现如下提示信息时,即代表已经成功启动了mongodb

Fri Apr
29 17:15:34 [initandlisten] MongoDB starting :
pid
=5280 port=27017 dbpath=c:\mymongodb 32-bi
...
Fri Apr
29 17:15:34 [initandlisten] waiting for connections on port 27017
Fri Apr
29 17:15:34 [websvr] web admin interface listening on port 28017

   在上面的信息中,我们注意到,mongodb在端口27017进行了监听来自客户端的连接,而在28017端口,则启用了web界面的管理工具,因此我们可以通过http://localhost:28017进行访问,可以看到如下的界面:

主流NOSQL数据库之MongoDB快速入门
▲点击查看大图

  接下来,我们学习下,如何将mongodb安装成windows 中的服务,首先我们在mongodb下,可以通过—help选项,查看相关的帮助指令,如下:

   C:\MongoDB\bin>mongod --help
 
Windows Service Control Manager options:
  
--install                install mongodb service
  --remove              remove mongodb service
  --reinstall             reinstall mongodb service (equivilant of mongod
                             --remove followed by mongod --install)
  --serviceName arg           windows service name
  --serviceDisplayName arg windows service display name
  --serviceDescription arg    windows service description
  --serviceUser arg              user name service executes as
  --servicePassword arg       password used to authenticate serviceUser

   可以看到,--install和—remove两个参数正是我们需要的。因此,将mongodb安装成windows服务的命令如下:

  mongod --dbpath "c:\mymongodb" --logpath "c:\mymongodb\logs.txt" --install --serviceName "MongoDB"

   上面的命令行中,用—dbpath参数指出了数据库的目录,--logpath则指出了日志存放的目录,而—serviceName参数则指出了,命名安装的服务名为MongoDB,运行后有如下提示:

all output going to: c:\mymongodb\logs.txt
Creating service MongoDB.
Service creation successful.
Service can be started
from the command line via 'net start "MongoDB"'.

   并且可以在windows的控制面板中的服务中,看到该服务。而卸载服务的命令也很简单,如下:

mongod --remove --serviceName "MongoDB"

 

=============================================== 

Mongodb快速入门之使用Java操作Mongodb

上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作。

  HelloWorld程序

  学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序。

  首先,要通过Java操作Mongodb,必须先下载Mongodb的Java驱动程序,可以在这里下载

  新建立一个Java工程,将下载的驱动程序放在库文件路径下,程序代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package com.mkyong.core;
import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

/**
* Java + MongoDB Hello world Example
*
*/
public class App {
    
public static void main(String[] args) {
        
try {
            
//实例化Mongo对象,连接27017端口
            Mongo mongo = new Mongo("localhost", 27017);
                              
//连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
            DB db = mongo.getDB("yourdb");
            
// Get collection from MongoDB, database named "yourDB"
//从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
            DBCollection collection = db.getCollection("yourCollection");
    
// 使用BasicDBObject对象创建一个mongodb的document,并给予赋值。
            BasicDBObject document = new BasicDBObject();
            document.put(
"id", 1001);
            document.put(
"msg", "hello world mongoDB in Java");
            
//将新建立的document保存到collection中去
            collection.insert(document);
            
// 创建要查询的document
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.put(
"id", 1001);
            
// 使用collection的find方法查找document
            DBCursor cursor = collection.find(searchQuery);
            
//循环输出结果
            while (cursor.hasNext()) {
            System.out.println(cursor.next());
            }
            System.out.println(
"Done");
        }
catch (UnknownHostException e) {
            e.printStackTrace();
        }
catch (MongoException e) {
            e.printStackTrace();
        }
    }
}

  最后,输出的结果为:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->{ "_id" : { "$oid" : "4dbe5596dceace565d229dc3"} ,
                
"id" : 1001 , "msg" : "hello world mongoDB in Java"}
Done

 

 

http://tech.it168.com/a2011/0603/1200/000001200064.shtml

http://tech.it168.com/a2011/0617/1206/000001206231.shtml

 

----------------------------------------------------------------------------------------------------------------------------------

Part Two:

 

去官方网站下载了程序,“绿色”的,通过命令行直接运行BIN下面的服务器mongod.exe即可,不过默认的数据库位置在C盘下,这总是不大合适,可以通过加参数 -dbpath来改变,如
mongod.exe –dbpath d:/db
注意这里有个问题,Windows下,一般是使用\作为路径分隔符的,不过在这里,如果直接使用d:\db这样的话,mongod会把\去掉,变成d:db这样,导致启动失败,所以比较简单的方法就是用/来代替\
服务器启动后,可以在浏览器中访问,默认地址是:http://127.0.0.1:28017/,里面会有一些数据库的基本信息
访问数据库可以使用BIN下面的mongo.exe,是个命令行工具。对于用惯了MS-SQL,MySQL这样有良好的数据库UI工具的我来说,让我直接用命令行去操作数据库实在是有些不习惯,在网上查了一下,UI工具有倒是有,不过都不大完善的样子,也就懒得下了。在命令行下,输入help可以看到基本操作命令:
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
db.help():显示数据库操作命令,里面有很多的命令
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
------------------------------------------------
大致的说明一下MongoDB中的数据格式,我没有去详细的查看官方的文档,只是按我试用过的感觉来说,其数据结构,类似JSON,即key-value成对,key一般就是String,而value而无所谓了,如一个JSON数据:
{
     name:"X-Man",
     birthday:{
        year:1987,
        month:1,
        day:20 
     }
}
只要你愿意,就可以把Value不断的复杂化,以方便存储数据
-----------------------------------------------------------
要使用Java操作MongoDB的话,要到官方网站下载一个驱动包,点击网站上的Drivers里面,可以看到目前支持的语言,非常的多……把包导入后,可以尝试来操作了(记得一定要开着服务器)
首先介绍一下比较常用的几个类
Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等
DB:对应一个数据库,可以用来建立集合等操作
DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等
DBObject接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,因为是key-value的数据结构,所以用起来其实和HashMap是基本一致的
DBCursor:用来遍历取得的数据,实现了Iterable和Iterator
接下来实际的操作一下,代码如下:

import com.mongodb.*;

public class Main {

    public static void main(String[] args) {

        try{
            Mongo m = new Mongo("127.0.0.1");

            //选择数据库,如果没有这个数据库的话,会自动建立

            DB db = m.getDB("mongo");

            //列出所有数据库名,不过发现,如果数据库里面是没有数据的话,并不会被列出来

            System.out.println("数据库列表:"+m.getDatabaseNames());



            //建立一个集合,和数据库一样,如果没有,会自动建立

            DBCollection col = db.getCollection("col");

            //列出所有集合名,和数据库一样,如果集合里面是没有数据的话,并不会被列出来

            System.out.println("当前数据库下的集合列表:"+db.getCollectionNames());



            //建立一个数据项,重复执行会多次添加一样的数据

            BasicDBObject val = new BasicDBObject();

            val.put("name", "X-Man");

            col.save(val);

            //保存的数据为

            //{ "_id" : "4b8de2f3053068a371e870c0" , "name" : "X-Man"}

            //_id是系统自动帮加上的,全局唯一

            //多次加入一样的数据时,_id都是不一样的



            //取得所有数据并打印出来

            DBCursor ite = col.find();

            while(ite.hasNext())

            {

                System.out.println(ite.next());

            }

        }catch(Exception error)

        {

            error.printStackTrace();

        }

    }

}

----------------------------更新操作--------------------------
view sourceprint?

import com.mongodb.*;



public class Main {

    public static void main(String[] args) {

        try{

            Mongo m = new Mongo("127.0.0.1");

            DB db = m.getDB("mongo");

            DBCollection col = db.getCollection("col");



            System.out.println("修改前:");

            showData(col);



            //查找所有 name=X-Man 的项,并更新

            BasicDBObject old_val = new BasicDBObject(),new_val = new BasicDBObject();

            old_val.put("name", "X-Man无敌");

            new_val.put("name", "X-Man无敌");

            col.update(old_val, new_val);//只会更新一个

            //col.updateMulti(new_val, old_val)不知道怎么回事,这函数不顶用



            System.out.println("修改后:");

            showData(col);

        }catch(Exception error)

        {

            error.printStackTrace();

        }

    }



    static void showData(DBCollection col)

    {

        DBCursor ite = col.find();

        while(ite.hasNext())

        {

            System.out.println(ite.next());

        }

    }

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics