`
dawuafang
  • 浏览: 1191950 次
文章分类
社区版块
存档分类
最新评论

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_NAME use db_test 如果数据库不存在,则创建数据库,否则切换到指定数据库
查看当前连接的数据库 db db
查看所有数据库 show dbs show dbs 对于空的数据库,mongodb不显示或者显示为dbname(empty)
删除数据库 db.dropDatabase() use db_test db.dropDatabase() 先切换到要删除的数据库,然后删除
创建集合 db.createCollection("name") use db_test db.createCollection("users") 切换到数据库
创建集合
查看集合 show collections show 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】
查询:limit db.collection.find().limit(NUMBER) `db.users.find().limit(2) 查询两条数据
查询:skip db.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条数据
使用此函数可实现分页查询
排序:sort db.collection.find().sort({“key”:1}) db.users.find().sort({"age":1}) 1:升序
-1:降序
查询:结果集限制 “`db.collection.find({},{“key”:0 1})“` 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

类型 数字 类型 数字
Double 1 String 2
Object 3 Array 4
Binary data 5 Object id 7
Boolean 8 Date 9
Null 10 Regular Expression 11
JavaScript 13 Symbol 14
JavaScript (with scope) 15 32-bit integer 16
64-bit integer 18 Min key 255
Max key 127

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() );
     }
   }
}
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    MongoDB学习笔记

    自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。

    mongodb学习笔记资料

    mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复

    Mongodb学习笔记.docx

    MongoDB 学习笔记 本文档是 MongoDB 学习笔记,涵盖了 NoSQL、Cache、运行平台等多个方面的知识点。 一、NoSQL 数据库 MongoDB MongoDB 是一个强大、灵活、可扩展性好的文档数据存储器,可以完成大部分关系数据库...

    mongoDB学习笔记及工具.zip

    本压缩包“mongoDB学习笔记及工具.zip”包含了一些资源,帮助你深入理解和掌握MongoDB的相关知识。 1. **笔记(note.txt)**: 这个文件可能是对MongoDB的基础概念、安装过程、基本操作和进阶特性的详细记录。笔记...

    MongoDB学习笔记思维导图.pdf

    本篇学习笔记将从基础操作到高级功能,详细阐述MongoDB的关键知识点。 首先,MongoDB的基本单元是集合(collection),类似于关系型数据库中的表,而集合中的元素称为文档(document),文档是键值对的集合,类似于...

    MongoDB学习笔记思维导图

    总结的MongoDB的学习笔记,基本上包括了MongoDB的方方面面,每个知识点,都有示例代码,有需要的朋友,可以下载下来进一步补充完善。

    MongoDB学习笔记1

    MongoDB 是一种流行的开源、非关系型数据库系统,以其灵活性、高性能和易用性而备受开发者青睐。在本文中,我们将深入探讨 ...在实际项目中,学习和掌握 MongoDB 及其驱动程序能够帮助你更好地应对现代数据存储需求。

    MongoDB学习笔记(六) MongoDB索引用法和效率分析

    MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...

    MongoDB学习笔记之GridFS使用介绍

    MongoDB的GridFS是一个强大的文件存储系统,专为在数据库中存储和检索大量小文件而设计。GridFS将文件拆分为多个数据块(chunk),每个块都有自己的文档存储在`fs.chunks`集合中,而文件元信息则保存在`fs.files`集合...

    mongoDB学习笔记

    本文介绍了 MongoDB 的基础使用、技术架构、应用场景、主要特点以及安装步骤。内容涵盖了 MongoDB 的基本操作和配置,深入探讨了其内部技术架构,讨论了适合的应用场景和实际案例,并详细说明了安装过程以帮助读者...

    MongoDB_学习笔记

    ### MongoDB 学习笔记知识点详解 #### 一、MongoDB 命令行基础操作 **1.1 帮助命令** - **help**:显示 MongoDB shell 的基本帮助信息。 - **db.help()**:提供当前数据库的帮助信息。 - **db.mycoll.help()**:...

    MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    在本篇MongoDB学习笔记中,我们将探讨如何利用MongoDB的文档结构来描述数据关系。 首先,MongoDB中的“集合”(collection)与关系型数据库中的“表”类似,但两者存在显著差异。在关系型数据库中,表的结构是预定义...

Global site tag (gtag.js) - Google Analytics