MongoDB的安装

1.环境说明

系统环境:Centos7.0
远程连接工具:xshell6.0
软件及版本:mongodb-linux-x86_64-3.6.3.tgz

2.下载安装MongoDB

#进入官网:https://www.mongodb.com/   https://www.mongodb.com/download-center/enterprise
#https://www.mongodb.com/download-center/community?jmp=nav
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz

#在usr/local/文件夹下创建mongodb文件夹
mkdir mongodb

#将mongodb-linux-x86_64-3.6.5下的文件移动到mongodb文件夹下
mv mongodb-linux-x86_64-3.6.5/* /usr/local/mongodb/

#进入mongodb
cd mongodb

#新建data文件夹和logs文件
mkdir data
touch /usr/local/mongodb/logs

#进入/usr/local/mongodb/bin目录下,启动mongodb服务
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork

#启动客户端,进入/usr/local/mongodb/bin目录下
./mongo

MongoDB的语法

1、查看所有数据库:

show dbs

2、查看当前所在数据库:

db

3、查看当前所在数据库中所有集合:

show collections

4、查看当前数据库相关信息(名称、文档个数、视图、索引、大小等):

db.stats()

5、创建、打开、切换 数据库:

use 数据库名字
 
如:use student

注:use 这个命令很特殊,它具有打开、 切换、 创建数据库的功能:如果打开的这个数据库存在就是打开这个数据库。如果打开的是一个不存在的数据库,那么就会创建一个同名的数据库,但是:注意:既然是创建一个新的数据库,那么就必须向数据库中新增一个集合(collections【就像关系数据库中的表】),并且插入一条数据(这样这个数据库才算创建成功)。

如:往集合中插入一条数据。可以不用先创建集合,直接往里添加数据即可:

db.student.insert({"name": "ange"});

db.student.insert({_id:"1",content:"我还是没有想明白到底为啥出错",userid:"1012",name:"ange",visits:NumberInt(2020)}); 
db.student.insert({_id:"2",content:"加班到半夜",userid:"1013",name:"rock",visits:NumberInt(1023)}); 
db.student.insert({_id:"3",content:"手机流量超了咋办?",userid:"1013",name:"pika",visits:NumberInt(111)}); 
db.student.insert({_id:"4",content:"坚持就是胜利",userid:"1014",name:"tiger",visits:NumberInt(1223)}); 

当命令执行后,数据库系统发现student是一个数据集合不存的,就自动创建一个集合,并随着数据的插入,数据库和集合也就真正的创建成功了。

6、删除数据库(注:这里是删除当前所在的数据库)

db.dropDatabase();

7、清屏(这是Dos的命令,当窗口中的内容太多时,可以使用该命令,清除屏幕内容,保持界面清晰):

cls

8、导入数据

当要插入的数据太多时,一条一条的insert在繁琐了。所以,我们可以在代码编辑器中以JSON格式编辑好要插入的数据,以.json文件格式保存,然后导入数据库:

下面就是将mydata.json文件,导入到test数据库的student集合中。

mongoimport --db test --collection student --drop --file mydata.json

mongoimport 导入命令

–db test 要导入的数据库

–collection student 要哪个集合中导入

–drop 导入前先把集合清空

–file mydata.json 要导入的那个文件

先创建好一个json文件,然后用mongoimport命令导入,这样比敲命令行代码要好很多(当然,在真正项目中,一般都是有用户界面,让用户自己输入的)

9、操作帮助命令(列出MongoDB数据库所有的操作方法)

db.help()
DB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [just calls db.runCommand(...)]
db.aggregate([pipeline], {options}) - performs a collectionless aggregation on this database; returns a cursor
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, {size: ..., capped: ..., max: ...})
db.createView(name, viewOn, [{$operator: {...}}, ...], {viewOptions})
db.createUser(userDocument)
db.currentOp() displays currently executing operations in the db
db.dropDatabase()
db.eval() - deprecated
db.fsyncLock() flush data to disk and lock server for backups
db.fsyncUnlock() unlocks server following a db.fsyncLock()
db.getCollection(cname) same as db['cname'] or db.cname
db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections
db.getCollectionNames()
db.getLastError() - just returns the err msg string
db.getLastErrorObj() - return full status object
db.getLogComponents()
db.getMongo() get the server connection object
db.getMongo().setSlaveOk() allow queries on a replication slave server
db.getName()
db.getPrevError()
db.getProfilingLevel() - deprecated
db.getProfilingStatus() - returns if profiling is on and slow threshold
db.getReplicationInfo()
db.getSiblingDB(name) get the db at the same server as this one
db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set
db.hostInfo() get details about the server's host
db.isMaster() check replica primary status
db.killOp(opid) kills the current operation in the db
db.listCommands() lists all the db commands
db.loadServerScripts() loads all the scripts in db.system.js
db.logout()
db.printCollectionStats()
db.printReplicationInfo()
db.printShardingStatus()
db.printSlaveReplicationInfo()
db.dropUser(username)
db.repairDatabase()
db.resetError()
db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into {cmdObj: 1}
db.serverStatus()
db.setLogLevel(level,<component>)
db.setProfilingLevel(level,slowms) 0=off 1=slow 2=all
db.setWriteConcern(<write concern doc>) - sets the write concern for writes to the db
db.unsetWriteConcern(<write concern doc>) - unsets the write concern for writes to the db
db.setVerboseShell(flag) display extra information in shell output
db.shutdownServer()
db.stats()
db.version() current version of the server

MongoDB数据的操作:(和关系型数据库一样,就是增、删、查、改)

1、插入数据:insert()

插入数据(这里以student集合【表】为例)

db.student.insert({"name": "ange", "age": 26, "sex": "男", job: "teacher"});
#删除users中的所有数据
db.users.drop();
var user1 = {
        "username" : "王昭君",
        "country" : "china",
        "address" : {
                "aCode" : "411000",
                "add" : "长沙"
        },
        "favorites" : {
                "movies" : ["杀破狼2","战狼","雷神1"],
                "cites" : ["长沙","深圳","上海"]
        },
        "age" : 18,
	   "salary":NumberDecimal("18889.09"),
       "lenght" :1.79
	    
};
var user2 = {
        "username" : "威尔史密斯",
        "country" : "English",
        "address" : {
                "aCode" : "311000",
                "add" : "地址"
        },
        "favorites" : {
                "movies" : ["复仇者联盟","战狼","雷神1"],
                "cites" : ["西安","东京","上海"]
        },
        "age" : 24,
       "salary":NumberDecimal("7889.09"),
       "lenght" :1.35
};
var user3 ={
        "username" : "吴亦凡",
        "country" : "japan",
        "address" : {
                "aCode" : "411000",
                "add" : "长沙"
        },
        "favorites" : {
                "movies" : ["肉蒲团","一路向西","倩女幽魂"],
                "cites" : ["东莞","深圳","东京"]
        },
        "age" : 22,
       "salary":NumberDecimal("6666.66"),
       "lenght" :1.85
};
var user4 =
{
        "username" : "slina",
        "country" : "USA",
        "address" : {
                "aCode" : "411000",
                "add" : "长沙"
        },
        "favorites" : {
                "movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],
                "cites" : ["青岛","东莞","上海"]
        },
        "age" : 20,
       "salary":NumberDecimal("6398.22"),
       "lenght" :1.77
};

var user5 =
{
        "username" : "森瑶",
        "country" : "UK",
        "address" : {
                "aCode" : "411000",
                "add" : "TEST"
        },
        "favorites" : {
                "movies" : ["蜘蛛侠","钢铁侠","蝙蝠侠"],
                "cites" : ["青岛","东莞","上海"]
        },
       "salary":NumberDecimal("1969.88")
};

db.users.insert(user1);
db.users.insert(user2);
db.users.insert(user3);
db.users.insert(user4);
db.users.insert(user5);

db.users.find().pretty();

查询喜欢的城市包含东莞和东京的user
select * from users  where favorites.cites has "东莞"、"东京“
db.users.find({ "favorites.cites" : { "$all" : [ "东莞" , "东京"]}})

只要包含东莞和东京的都会被查询出来
db.users.find({ "favorites.cites" : { "$in" : [ "东莞" , "东京"]}})

查询国籍为英国或者美国,名字中包含s的user
select * from users  where username like '%s%' and (country= English or country= USA)
db.users.find({ "$and" : [ { "username" : { "$regex" : ".*s.*"}} , { "$or" : [ { "country" : "English"} , { "country" : "USA"}]}]})

2、查找数据find()

查找数据,如果find()中没有参数,那么将列出这个集合的所有文档:

db.student.find()
 
//相当于下面关系数据库中的语法:
select * from test.student

精确匹配:

db.student.find({"name":"ange"});

多个条件:

db.student.find({"name":"ange" , "age":26})

大于条件:

db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value 
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value 
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value 
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value 
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value 
db.student.find({"age":{$gt:20}});

小于条件:

db.student.find({"age":{$lt:20}});

包含与不包含

包含使用$in操作符。

示例:查询学生集合中userid字段包含1013和1014的文档

db.student.find({userid:{$in:["1013","1014"]}})

不包含使用$nin操作符。

示例:查询学生集合中userid字段不包含1013和1014的文档

db.student.find({userid:{$nin:["1013","1014"]}})

条件连接

我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相当于SQL的and)

格式为:

$and:[ { },{ },{ } ]
db.student.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})

如果两个以上条件之间是或者的关系,我们使用 操作符进行关联,与前面and的使用方式相同

格式为:

$or:[ { },{ },{ } ]
db.student.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})

寻找所有年龄是9岁,或者11岁的学生

db.student.find({$or:[{"age":9},{"age":11}]});

统计条数

db.student.count()

如果按条件统计 ,例如:统计userid为1013的记录条数

db.student.count({userid:"1013"})

模糊查询

MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:

/模糊查询字符串/

例如,我要查询学生中内容包含“流量”的所有文档,代码如下:

db.student.find({content:/流量/})

如果要查询学生的内容中以“加班”开头的,代码如下:

db.student.find({content:/^加班/})

列值增长

如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用$inc运算符来实现

db.student.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )

3、修改数据:update()

查找名字叫做ange的,把年龄更改为16岁:

db.student.update({"name":"ange"},{$set:{"age":16}});

查找成绩是70,把年龄更改为33岁:

db.student.update({"score":70},{$set:{"age":33}});

更改所有匹配项【默认情况下,update()方法是更新单个文档。 要更新多个文档,请使用开启update()方法中的multi选项】。

db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});

完整替换,不出现$set关键字了:

db.student.update({"name":"ange"},{"name":"rock","age":16});

4、删除数据:remove()

db.student.remove({"name":"ange"});

默认情况下,remove()方法将删除所有符合删除条件的文档。 使用开启justOne选项将删除操作限制为仅匹配文档之一。

db.student.remove({"name":"ange"}, {justOne: true});

Java操作MongoDB

mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动。

我们通过一个入门的案例来了解mongodb-driver的基本使用

查询全部记录

  • 创建工程 mongoDemo, 引入依赖

    <dependencies> 
        <dependency> 
            <groupId>org.mongodb</groupId> 
            <artifactId>mongodb‐driver</artifactId> 
            <version>3.6.3</version> 
        </dependency> 
    </dependencies>
    
  • 创建测试类

    /**
    * MongoDb入门小demo 
    */ 
    public class MongoDemo { 
        public static void main(String[] args) { 
            MongoClient client=new MongoClient("192.168.184.134");//创建连接 
            MongoDatabase studentdb = client.getDatabase("studentdb");//打开数据库 
            MongoCollection<Document> student = studentdb.getCollection("student");// 获取集合 
            FindIterable<Document> documents = student.find();//查询记录获取文档集合 
            for(Document document:documents){ // 
                System.out.println("内容:"+ document.getString("content")); 
                System.out.println("用户ID:"+document.getString("userid")); 
                System.out.println("浏览量:"+document.getInteger("visits")); 
            }
            client.close();//关闭连接 
        } 
    }
    

条件查询

BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,是key- value的数据结构,用起来和HashMap是基本一致的。

  • 查询userid为1013的记录

    public class MongoDemo1 { 
        public static void main(String[] args) { 
            MongoClient client=new MongoClient("192.168.184.134");//创建连接 
            MongoDatabase studentdb = client.getDatabase("studentdb");//打开数据库 
            MongoCollection<Document> student = studentdb.getCollection("student");//获取集合 
            BasicDBObject bson=new BasicDBObject("userid","1013");// 构建查询条件 
            FindIterable<Document> documents = student.find(bson);//查询记录获取结果集合 
            for(Document document:documents){ // 
                System.out.println("内容:"+ document.getString("content")); 
                System.out.println("用户ID:"+document.getString("userid")); 
                System.out.println("浏览量:"+document.getInteger("visits")); 
            }
            client.close();//关闭连接 
        } 
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值