MongoDB的简介和使用(基于JAVA)

MongoDB的简介和使用(基于JAVA)

1. MongoDB的相关概念

① MongoDB 是一个面向文档的数据库系统。文档数据库区别于传统的其他数据库,它是用来管理文档的。传统数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的基本单位,一个文档相当于关系数据库中的一条记录。文档数据库不同于文件系统,也不同于关系数据库(不提供对参照完整性和分布事务的支持)。

② MongoDB中,文档是对数据的抽象,表现形式威BSON(Binary JSON)。MongoDB 把BSON作为数据存放的磁盘中。

③ MongoDB 的特点:
  • mongo是c++实现的,性能优越速度快。
  • 所有实体都是在首次使用时创建。
  • 没有严格的事务特性,但是它保证任何一次数据变更都是原子性的。
  • 也没有固定的数据模型。直接存取BSON,更加灵活,可以在文档中插入复杂数据类型。开发者在使用 MongoDB时无须预定义关系数据库中”表”等数据库对象。实用性更强,大大提升开发进度。
  • MongoDB目前不支持join操作,需要复杂查询的应用不建议使用MongoDB。
  • MongoDB 与 MySQL数据库的对比:
MySQLMongoDB
集合
文档
成员
主键Object id (自动生成)

2. 安装和使用MongoDB

①. http://www.mongodb.org/ 官网下载安装包,傻瓜化安装。

②.MongoDB安装完成后,进去安装目录, 此时发现只有Server文件夹。 手动新建data文件夹和log文件夹,分别用于存放数据库文件和日志文件。
这里写图片描述

③.手动新建mongo.config配置文件,并复制下面两行代码。分别是data文件夹绝对路径和log文件夹绝对路径。
dbpath=C:\Software\MongoDB\data
logpath=C:\Software\MongoDB\log\mongo.log

④. 进入MangoDB安装目录的bin目录下,启动MongoDB,如下图:
mongod.exe –config C:\Software\MongoDB\mongo.config
这里写图片描述

⑤. 启动完成后,重新打开一个dos窗口,进行对MongoDB的操作。刚才的窗口如果关闭,则MangoDB 服务停止。

常用语法:
db.user.insert({“id”: “001”, “name”: “pancong”});
db.user.drop(); // 删除user集合
db.user.find(); // 查询所有
db.user.find({ “age” : { $gt: 20 } } ); // greater than : field > value

3. 使用Java对MongoDB进行操作(需要引入MongoDB驱动包和Junit)

Mongo mongo = new Mongo(); //创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017
DB db = mongo.getDB(“demo”); //获取一个demo数据库,如果不存在自动创建
DBCollection users = db.getCollection(“users”); //获取集合,相当于传统数据库中的表

MongoDBTest

package com.mongoDB.demo;

import java.net.UnknownHostException;
import java.util.Date;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.util.JSON;

public class MongoDBTest {
    public static void main(String[] args) {
        try {
            Mongo mongo = new Mongo();
            System.out.println("DataBases:");
            for(String DBName:mongo.getDatabaseNames()){
                System.out.println(DBName);
            }
            DB demoDB = mongo.getDB("demoDB");
            DBCollection users = demoDB.getCollection("users");

            //查询集合中的数据 DBCursor可以看作传统数据库中的游标
            DBCursor cur = users.find();
            while(cur.hasNext()){
                System.out.println(cur.next());
            }
            System.out.println(cur.count());
            System.out.println(cur.getCursorId());
            System.out.println(JSON.serialize(cur));

            User user = new User("hw"+new Date(), (int)(Math.random()*50));
            users.insert(user);


        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        }

    }
}

MongoDBDemo

package com.mongoDB.demo;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class MongoDBDemo {
    //连接对象
    Mongo mongo = null;
    //数据库
    DB db = null;
    //集合
    DBCollection users = null;

    //初始化数据库
    @Before
    public void init() {
        try {
            mongo = new Mongo();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        }

        //获取demo数据库,没有会自动创建
        db = mongo.getDB("demo");
        //获取users Collection, 没有会自动创建
        users = db.getCollection("user");
    }

    @After
    public void close(){
        if(mongo != null)
            mongo.close();
        //连接对象
          mongo = null;
        //数据库
          db = null;
        //集合
         users = null;
    }


    //查询所有
    @Test
    public void findAll(){
        System.out.println("查询所有数据");
        DBCursor cur = users.find();
        while(cur.hasNext()){
            System.out.println(cur.next());
        }
        System.out.println("现有记录:"+cur.count());
    }

    @Test
    public void addOne(){
        System.out.println("添加一条记录");
        User user = new User("hw"+new Date(), (int)(Math.random()*50));
        users.save(user);
        this.findAll();

    }

    @Test
    public void addList(){
        System.out.println("添加多条记录");
        List<DBObject> userList = new ArrayList<>();
        for(int i=0; i< 5; i++){
            userList.add(new User("hw"+new Date(), (int)(Math.random()*50)));
        }
        users.insert(userList);
        this.findAll();
    }

    @Test
    public void delete(){
        System.out.println("删除年龄大于20岁的");
        users.remove(new BasicDBObject("Age", new BasicDBObject("$gt",20)));
        this.findAll();
    }

    @Test
    public void findSort(){
        System.out.println("按照年龄排序");
        DBCursor cur = users.find().sort(new BasicDBObject("Age",-1));
        while(cur.hasNext()){
            System.out.println(cur.next());
        }

    }

    @Test
    public void update(){
        System.out.println("修改,年龄低于20岁的改为50岁");
        users.update(new BasicDBObject("Age",19), new BasicDBObject("$set", new BasicDBObject("Age",100)));
//      db.user.update({"Age":19},{"$set":{"Age":100}},false,false); 选择只更新更新的第一条数据
//      db.user.update({"Age":19},{"$set":{"Age":100}},false,true); 所有满足条件的数据都更新
        this.findAll();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果大柚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值