mongodb学习笔记

鸣谢:菜鸟教程

1.基本概念

1.1 NOSQL

NOSQL,即not only sql,不仅仅是sql的意思,NOSQL泛指非关系型数据库。关于关系型数据库和分i关系型数据库的区别,在这里不进行阐述,大家可以自行百度。NOSQL主要分为四种类型:键值存储数据库/列存储数据库/文档型数据库/图形数据库。

1.2 MongoDB

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB数据上述所说的文档型数据库

关系型数据库mongodb
数据库数据库
集合
文档
字段
主键主键,MongoDB自动将_id字段设置为主键

在一个mongodb中,可以创建多个数据库,一个数据库可以包含多个集合,一个集合可以包含多个文档。

1.2.1 文档

文档是类似json格式的数据,比如:{“name”:“张三”}

1.2.2 集合

集合用于存储文档,存储的文档的结构可以相同也可以不同
例如:
{“name”:“张三”}
{“id”:“111”,”age”:”12”}

1.2.3 元数据

数据库本身的信息也是存储在集合中,可以用以下语句查看:
DBNAME.system.namespaces :列出所有名字空间
DBNAME.system.indexs :列出所有索引
DBNAME.system.profile :列出数据库概要信息
DBNAME.system.users :列出访问数据库的用户
DBNAME.system.sources :列出服务器信息

2.语法

2.1 语法
功能语句示例备注
创建数据库use DATABASE_NAMEuse db_test如果数据库不存在,则创建数据库,否则切换到指定数据库
查看当前连接的数据库dbdb
查看所有数据库show dbsshow dbs对于空的数据库,mongodb不显示或者显示为dbname(empty)
删除数据库db.dropDatabase()use db_test db.dropDatabase()先切换到要删除的数据库,然后删除
创建集合db.createCollection("name")use db_test db.createCollection("users")切换到数据库
创建集合
查看集合show collectionsshow collections
删除集合db.collection_name.drop()db.users.drop()
向集合中插入文档db.collection_name .insert(document)db.users.insert([ { name : "Tom",sex: "boy", age:"24" },{ name : "Mary", sex: "girl", age:"23" })文档中的key不需要引号 不指定_id 会自动为_id赋值
向集合中插入文档db.collection_name .save(document)db.users.save([{ name : "Tom", sex: "boy", age:"24"},{ name : "Mary",sex: "girl",age:"23"}])与insert方法一样
疑问:网上说指定_id时,使用save可以更新,但实际上会报错
简单查询db.collection.find()db.users.find()
以易读的方式查询db.collection.find().pretty()db.users.find().pretty()
查询:等于{“key”:“value”}`db.users.find({"name":"Tom"})where name = “Tom”
查询:不等于{“key”:{$ne:value}db.users.find({"age":{$ne:23}})where age!=23
查询:大于{“key”:{$gt:value}}db.users.find({"age":{$gt:23}})where age>23
查询:小于{“key”:{$lt:value}}db.users.find({"age":{$lt:23}})where age<23
查询:大于等于{“key”:{$gte:value}}db.users.find({"age":{$gte:23}})where age>=23
查询:小于等于{“key”:{$lte:value}}db.users.find({"age":{$lte:23}})where age<=23
查询:AND{"key1":"value1","key2":"value2"}db.users.find({"name":"Tom","sex":"boy"})where name=”Tom” and sex=”boy”
查询:OR{$or:[{"key1":"vaule1" },{"key2":"value2" }]}db.users.find({$or:[{"age":"24",{"age":"25"}}]})where (age = 24 or age = 25)
查询:AND 与OR组合db.users.find({"sex":"boy",{$or:[{"age":"24",{"age":"25"}}]} })where sex=”boy” and (age = 24 or age = 25)
更新文档db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,multi: <boolean>, writeConcern: <document>
实例1:
db.users .update(
{"name":"Tom"},
{$set:{"name":"Tony"}}
)
实例2:
db.users .update(
{"name":"Tom"},
{$set:{"name":"Tony"}},
{
multi:true
}
)
query:过滤条件
update:修改操作
upsert:若更新的数据不存在,是否插入,默认为false(可选)
multi:是否全部更新,默认为false即只更新查询到的第一条(可选)
writeConcern:抛出异常的级别(可选)
实例1与实例2相当于:
update users set name = “Tony” where name = “Tom”
实例1只修改一条,实例二会修改所以符合条件的数据
删除文档2.6之前:db.collection.remove(
<query>,
<justOne>
)
2.6之后:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
实例1:
db.users.remove(
{"name":"Tony"}
)
实例2:
db.users.remove(
{"name":"Tony"},
{
justOne:true
}
)
清空集合db.collection.remove()db.users.remove()删除集合中的所有文档
查询:$type操作符db.collection.find("key":{$type:type})db.users.find("name":{$type:2})左侧实例为查询name为String的数据
【具体映射关系见2.2】
查询:limitdb.collection.find().limit(NUMBER)`db.users.find().limit(2)查询两条数据
查询:skipdb.collection.find().skip(NUMBER)实例1:
`db.collection.find().skip(2)
实例2:
db.collecti on.find().limit(2).skip(2)
实例3:
db.collection.find().skip(2).limit(2)
跳过指定数据的数据
实例1:跳过前两条数据
实例2和实例3均为查询第3条和第4条数据
使用此函数可实现分页查询
排序:sortdb.collection.find().sort({“key”:1})db.users.find().sort({"age":1})1:升序
-1:降序
查询:结果集限制“`db.collection.find({},{“key”:01})“`db.collection.find({},{"name":1,_id:0])
索引db.collection.ensureIndex({“key”:1})db.users.ensureIndex("name":1)建立索引 1:升序 -1:降序
聚合函数db.collection.aggregate()实例1
db.users.aggregate({
_id:"$name",
ageSum{$sum:"$age"}
})
实例2
db.users.aggregate([
{$match:{
"age":{$gt:23}
}
},
{
_id:"$name",
ageAvg:{$avg:"age"}
}
])
实例3
db.users.aggregate([
{$sort:{
"name":1
}
},
{
$limit:3
},
{$skip:1
},
{
id:"$name",
ageAvg:{$avg:"age"}
}
])
实例4:
db.users.aggregate({
_id:{name:"$name",age:"$age"},
count:{$sum:1}
})
实例1
select name,sum(age) as ageSum from users group by name
实例2
select name,avg(age) as ageAvg from users where age>23 group by name
实例3
select name,avg(age) as ageAvg from users where age>23 group by name
select name from users group by name limit 1,3 order by name asc
实例4
select name,age,count(1) from users group by name,age
2.2 $type
类型数字类型数字
Double1String2
Object3Array4
Binary data5Object id7
Boolean8Date9
Null10Regular Expression11
JavaScript13Symbol14
JavaScript (with scope)1532-bit integer16
64-bit integer18Min key255
Max key127

3 mongodb java

3.1 连接数据库
3.1.1 无需登录验证
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
       // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库 数据库不存在时会创建数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
       System.out.println("Connect to database successfully");

      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}
3.1.2 需要登录验证
import java.util.ArrayList; 
import java.util.List; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential; 
import com.mongodb.ServerAddress; 
import com.mongodb.client.MongoDatabase; 

public class MongoDBJDBC { 
    public static void main(String[] args){ 
        try { 
            //连接到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"); 
        } catch (Exception e) { 
            System.err.println( e.getClass().getName() + ": " + e.getMessage() ); 
        } 
    } 
}
3.2 操作集合
3.2.1 创建集合
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
      // 连接到 mongodb 服务
      MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


      // 连接到数据库
      MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
      System.out.println("Connect to database successfully");
      mongoDatabase.createCollection("test");
      System.out.println("集合创建成功");

      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}
3.2.2 获取集合
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
       // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
       System.out.println("Connect to database successfully");

       MongoCollection<Document> collection = mongoDatabase.getCollection("test");
       System.out.println("集合 test 选择成功");
      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}
3.3 操作文档
3.3.1 插入文档
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
         System.out.println("Connect to database successfully");

         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");
         //插入文档 
         /**
         * 1. 创建文档 org.bson.Document 参数为key-value的格式
         * 2. 创建文档集合List<Document>
         * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
         * */
         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); 
         System.out.println("文档插入成功"); 
      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}
3.3.2 检索所有文档
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
         System.out.println("Connect to database successfully");

         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");

         //检索所有文档 
         /**
         * 1. 获取迭代器FindIterable<Document>
         * 2. 获取游标MongoCursor<Document>
         * 3. 通过游标遍历检索出的文档集合
         * */ 
         FindIterable<Document> findIterable = collection.find(); 
         MongoCursor<Document> mongoCursor = findIterable.iterator(); 
         while(mongoCursor.hasNext()){ 
            System.out.println(mongoCursor.next()); 
         } 

      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}
3.3.3 更新文档
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
         System.out.println("Connect to database successfully");

         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");

         //更新文档   将文档中likes=100的文档修改为likes=200   
         collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200))); 
         //检索查看结果 
         FindIterable<Document> findIterable = collection.find(); 
         MongoCursor<Document> mongoCursor = findIterable.iterator(); 
         while(mongoCursor.hasNext()){ 
            System.out.println(mongoCursor.next()); 
         } 

      }catch(Exception e){
         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
      }
   }
}
3.3.4 删除第一个文档
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static void main( String args[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 
         System.out.println("Connect to database successfully");

         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");

         //删除符合条件的第一个文档 
         collection.deleteOne(Filters.eq("likes", 200)); 
         //删除所有符合条件的文档 
         collection.deleteMany (Filters.eq("likes", 200)); 
         //检索查看结果 
         FindIterable<Document> findIterable = collection.find(); 
         MongoCursor<Document> mongoCursor = findIterable.iterator(); 
         while(mongoCursor.hasNext()){ 
           System.out.println(mongoCursor.next()); 
         } 

      }catch(Exception e){
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
     }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

光光-Leo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值