MongoDB基础

1.什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

2.MongoDB 概念解析

SQL术语/概念	MongoDB术语/概念	解释/说明
database		database			数据库
table			collection			数据库表/集合
row				document			数据记录行/文档
column			field				数据字段/index			index				索引
table 			joins	 			表连接,MongoDB不支持
primary key		primary key			主键,MongoDB自动将_id字段设置为主键

3.创建数据库

如果数据库不存在,则创建数据库,否则切换到指定数据库。

use DATABASE_NAME 

查看所有数据库

show dbs

4.删除数据库

删除当前数据库

db.dropDatabase()

5.创建集合

db.createCollection(name, options)

name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项

db.createCollection("table")

6.删除集合

db.collection.drop()

7.插入文档

db.COLLECTION_NAME.insert(document)
>db.table.insert({
	title: 'MongoDB 教程', 
    url: 'http://www.test',
    tags: ['mongodb', 'database'],
    likes: 100
})

8.更新文档

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

>db.table.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})

9.删除文档

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
>db.table.remove({'title':'MongoDB 教程'})

10.查询文档

db.collection.find(query, projection)

query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

>db.table.find().pretty()

11.条件操作符

MongoDB中条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

db.table.find({likes : {$gt : 100}})

11.Limit与Skip方法

limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据

>db.COLLECTION_NAME.find().limit(NUMBER)
db.table.find({},{"title":1}).limit(2)
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

12.sort() 方法

使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

db.table.find({},{"title":1}).sort({"likes":-1})

13.索引

>db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

>db.table.createIndex({"title":1})

14.聚合

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

集合中的数据如下:

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'test',
   url: 'http://www.test',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'test',
   url: 'http://www.test',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

现在我们通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "runoob.com",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}

15.MongoDB 复制(副本集)

MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。

16.分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

17.备份与恢复

数据备份

>mongodump -h dbhost -d dbname -o dbdirectory
-h:

MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
数据恢复

>mongorestore -h <hostname><:port> -d dbname <path>

–host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
–db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
你不能同时指定 和 --dir 选项,–dir也可以设置备份目录。
–dir:
指定备份的目录
你不能同时指定 和 --dir 选项。

18.java连接mongodb

1)下载mongo-java-driver
2)连接数据库

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

3)若mongodb需要密码

//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  
//ServerAddress()两个参数分别为 服务器地址 和 端口  
ServerAddress serverAddress = new ServerAddress("localhost",27017);  
List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
addrs.add(serverAddress);  
              
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码  
 MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
credentials.add(credential);  
              
//通过连接认证获取MongoDB连接  
MongoClient mongoClient = new MongoClient(addrs,credentials);  
              
//连接到数据库  
MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
System.out.println("Connect to database successfully");  

4)创建集合

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
mongoDatabase.createCollection("test");

5)插入文档
用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
Document document = new Document("title", "MongoDB").
append("description", "database").  
append("likes", 100).  
append("by", "Fly");  
List<Document> documents = new ArrayList<Document>();  
documents.add(document);  
collection.insertMany(documents);

6)获取集合

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
MongoCollection<Document> collection = mongoDatabase.getCollection("test");

19. 高级部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值