10月10日MongoDB学习笔记

标签

数据库

java

MongoDB

发布时间:

本文字数:1,573 字 阅读完需:约 4 分钟

简介

MongoDB 是一个开源的文档数据库,并是领先的NoSQL数据库。

基础使用

  1. 使用 use 数据库名称 用于创建数据库。该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库。
  2. 使用 db 用于查看当前所在数据库
  3. 使用 show dbs 查看当前所有数据库
  4. 使用db.dropDatabase() 删除当前所在的数据库。
  5. 使用db.createCollection(name, options) 是用来创建集合。
    nameString 要创建的集合名称
    options:Document (可选)指定有关内存大小和索引选项
  6. 使用show collections 查看当前数据库中的所有集合。
  7. 使用db.集合名称.drop()用来删除一个集合。

查询

  1. 插入一条数据:
    db.集合名称.insert({key1:val1,…..})
    例:db.c_user.insert({userid: "admin", username: "administrator", age: 20, address: "shanghai"})
  2. 插入多条数据: 使用数组形式
    例:mymovies=[{name:"my movies02"},{name:"my movies03"}]
  3. 使用MongoDB 的 find() 方法以非结构化的方式显示所有的文件。
  4. 查询指定条目
    db.c_user.find({address: "changchun"})
    查询c_user表中的address为changchun的所有数据 db.c_user.find({address: {$ne:"changchun"}})
    查询不等于changchun的数据
    其他关键字: $lt 小于; $lte 小于等于 ; $gt 大于$gte 大于等于; $ne 不等于
    多条件and查询示例db.c_user.find({age:{$gt: 18},address:"shanghai"})
    多条件or查询示例: db.c_user.find({$or:[{age: 18}, {age: 20}]})
    查询年龄大于18且居住在上海或存储的用户:
    db.c_user.find({age:{$gt:18},$or:[{address: "shanghai"},{address:"changchun"}]})
  5. 使用MongoDB 的 find() .pretty()方法以结构化的方式显示所有的文件。
    例:db.c_user.find().pretty() 查询c_user表中所有数据,并格式化显示
  6. 使用MongoDB 的 findOne() 返回集合中的第一条文档数据。

修改

使用db.collection.update( criteria, objNew, upsert, multi )更新现有的文档。 Criteria 更新操作的条件,类似于SQL语句中的where字句
objNew update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
Upsert 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

例: db.c_user.update({username:"zhangsan"},{$set:{age:22}}, false, true)
将用户名为张三的数据的年龄修改为22,false的意思指若无数据,是否添加,true的意思是否更新所有记录

删除

MongoDB的 remove(deletion criteria, justOne) 方法用于从集合中删除文档。remove() 方法接受两个参数。
deletion criteria :(可选)删除标准,根据文件将被删除。
justOne : (可选)如果设置为true或1,然后只删除一个文件。

示例删除address为changchun的user:
db.c_user.remove({address: "changchun"})

投影

mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整体。如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段。
MongoDB 的find()方法,在MongoDB查询文档接受的第二个可选参数是要检索的字段列表。
在MongoDB中,当执行find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值1或0。 1用来显示字段而0是用来隐藏字段。

例: db.c_user.find({age:{$gt: 18}},{_id:0, userid:1, username: 1})

限制记录

要限制 MongoDB 中的记录,需要使用 limit() 方法。 limit() 方法接受一个数字型的参数,这是要显示的文档数。如果不指定数量 limit() 方法的参数,它会显示从集合中的所有文件。 

db.infos.find().limit(2)

除了limit() 方法,还有一个方法skip() 也接受数字类型的参数,并使用跳过的文档数。默认值skip()方法是0
db.infos.find().limit(1).skip(1)

分页

Skip()+Limit() 实现文档数据分页显示
操作:分页显示用户数据,每页显示2条数据(pageSize=2)
pageSize: 单页显示的文档个数,使用limit(pageSize)控制
skip是第(n-1)*pageSize,n代表页数
显示第1页数据 limit(pageSize) skip((1-1)*pageSize)
db.infos.find(). limit(2).skip(0)
显示第2页数据 limit(pageSize) skip((2-1)*pageSize)
db.infos.find(). limit(2). skip(2)

排序

要在 MongoDB 中的文档进行排序,需要使用sort()法。 sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序。要指定排序顺序1和-1。 1用于升序排列,而-1用于降序。
操作:按照年龄降序排列用户信息
db.infos.find().sort({age:-1})

java连接MongoDb示例

导入依赖

pom.xml

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>3.12.11</version>
    </dependency>

操作示例

package com.zr;

import java.util.ArrayList;
import java.util.List;

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[]) {
        // deleteDocument();
        // getCollection();
        // insertDocuments();
        // createCollection();
        getAllDocument();
    }

    // 创建集合
    public static void createCollection() {
        try {
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient("localhost", 27017);
            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
            System.out.println("Connect to database successfully");
            mongoDatabase.createCollection("test");
            System.out.println("集合创建成功");
            mongoClient.close();
        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        }
    }

    // 获取集合
    public static void getCollection() {
        try {
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient("localhost", 27017);
            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
            System.out.println("Connect to database successfully");

            MongoCollection<Document> collection = mongoDatabase.getCollection("test");
            System.out.println("集合test选择成功:" + collection);
            mongoClient.close();
        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        }
    }
    
        // 插入文档
        public static void insertDocuments() {
             try{   
                 // 连接到 mongodb 服务
                 MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
                 
                 // 连接到数据库
                 MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");  
                 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", "ZR");  
                 List<Document> documents = new ArrayList<Document>();  
                 documents.add(document);  
                 collection.insertMany(documents);  
                 System.out.println("文档插入成功"); 
                 mongoClient.close();
              }catch(Exception e){
                 System.err.println( e.getClass().getName() + ": " + e.getMessage() );
              }
        }
        
        //检索所有文档
        public static void getAllDocument() {
             try{   
                 // 连接到 mongodb 服务
                 MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
                 
                 // 连接到数据库
                 MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");  
                 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());  
                 }  
                 mongoClient.close();
              }catch(Exception e){
                 System.err.println( e.getClass().getName() + ": " + e.getMessage() );
              }
        }
        
        public static void updateDocument() {
             try{   
                 // 连接到 mongodb 服务
                 MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
                 
                 // 连接到数据库
                 MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");  
                 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());  
                 }  
                 mongoClient.close();
              }catch(Exception e){
                 System.err.println( e.getClass().getName() + ": " + e.getMessage() );
              }
        }
        
        public static void deleteDocument() {
            try{   
                 // 连接到 mongodb 服务
                 MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

                 // 连接到数据库
                 MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");  
                 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());  
                 }
                 mongoClient.close();
                   
              }catch(Exception e){
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
             }
        }

}