MongoDB文档说明

MongoDB学习文档说明收获

一、简介

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

安装包地址:https://www.mongodb.com/try/download/community

安装说明及注意事项:https://www.runoob.com/mongodb/mongodb-window-install.html

可视化工具:https://robomongo.org/download

二、体系结构

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键
  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB区分类型和大小写。
  4. MongoDB的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

三、数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

四、MongoDB语法

1、选择创建、查看、删除数据库

**选择创建:**use 数据库名 (如果数据库存在则选择该数据库,如果数据库不存在则自动创建)

**查看:**show dbs

**删除:**先选择数据库 再删除 db.dropDatabase()

2、创建、选择、查看、删除集合

创建:db.createCollection(name, options)

name: 要创建的集合名称

options: 可选参数, 指定有关内存大小及索引的选项

options 可以是如下参数:

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

**选择:**use 集合名

**查看:**show collections (查看集合,需要先选择数据库之后,才能查看该数据库的集合)

**删除:**db.集合名.drop()

3、文档操作

**插入:**db.集合名称.insert(数据)

例如:db.test.insert({name:“test01”,userid:“1001”})

**查询:**db.集合名称.find()

例如:db.test.find() db.test.findOne({userid:‘1001’}) db.test.find().limit(2)

**修改:**db.集合名称.update(条件,修改后的数据)

例如:db.test.update({_id:“1001”},{name:“test02”}) 执行后发现,这条文档除了thumbup字段其它字段都不见了。

为了解决这个问题,我们需要使用修改器KaTeX parse error: Expected '}', got 'EOF' at end of input: …({_id:"1001"},{set:{name:“test02”}})

**删除:**db.集合名称.remove(条件)

例如:db.comment.remove({name:“test02”})

4、统计

db.comment.count()

按条件统计:db.comment.count({userid:“1001”})

5、模糊查询

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

包含:db.test.find({name:/te/})

开头:db.test.find({content:/^te/})

6、条件查询

  • (>) 大于 $gt
  • (<) 小于 $lt
  • (>=) 大于等于 $gte
  • (<= ) 小于等于 $lte
  • (!=) 不等于 $ne

例如:db.test.find({num:{$gt:1000}})

7、条件连接

$and:[ {条件},{条件},{条件} ]

例如:查询大于等于1001并且小于1003的用户:

db.test.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[ {userid:{gte:1001}} ,{userid:{$lt:1003} }]})

五、使用Java代码完成CRUD


import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.HashMap;

/**
 * @author ygm
 * @description
 * @date 2020/9/28
 */
public class DoTest {

    MongoClient mongoClient = null;
    MongoDatabase database = null;
    MongoCollection<Document> collection = null;

    /**
     * 初始化
     */
    @Before
    public void init() {
        mongoClient = new MongoClient("localhost", 27017);
        database = mongoClient.getDatabase("test");
        collection = database.getCollection("test");
    }

    @After
    public void after() {
        mongoClient.close();
    }

    /**
     * 连接测试
     */
    @Test
    public void test01() {
        try {
            System.out.println("Connect to database successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询所有
     */
    @Test
    public void test02() {
        FindIterable<Document> documents = collection.find();
        for (Document document : documents) {
            System.out.println("_id:" + document.get("_id"));
            System.out.println("content:" + document.get("content"));
            System.out.println("userid:" + document.get("userid"));
            System.out.println("num:" + document.get("num"));
        }
    }

    /**
     * 根据id查询
     */
    @Test
    public void test03() {
        FindIterable<Document> documents = collection.find(new BasicDBObject("_id", "1"));
        for (Document document : documents) {
            System.out.println("_id:" + document.get("_id"));
            System.out.println("content:" + document.get("content"));
            System.out.println("userid:" + document.get("userid"));
            System.out.println("num:" + document.get("num"));
        }
    }

    /**
     * 修改
     */
    @Test
    public void test04() {
        //修改的条件
        Bson filter = new BasicDBObject("_id", "6");
        //修改的数据
        Bson data = new BasicDBObject("$set", new Document("userid", "8888"));

        collection.updateOne(filter, data);
    }

    /**
     * 新增
     */
    @Test
    public void test05() {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("_id", "7");
        map.put("content", "很棒!");
        map.put("userid", "9999");
        map.put("num", 123);
        Document document = new Document(map);
        collection.insertOne(document);
    }

    /**
     * 删除
     */
    @Test
    public void test06() {
        Bson filter = new BasicDBObject("_id", "7");
        collection.deleteOne(filter);
    }
}

六、MongoTemplate的使用

已封装了MongodbUtils,可通过MongodbUtils获取MongoTemplate

依赖:

<dependency>
   <groupId>dbox.slite</groupId>
   <artifactId>slite-mongodb</artifactId>
   <version>${slite.version}</version>
</dependency>

导入:

<import resource="classpath:META-INF/spring/slite-mongodb.xml" />

1、检索数据

public void mongoDbJavaTest(){
    MongoDbJavaTest mongoDbJavaTest = new MongoDbJavaTest();
    mongoDbJavaTest.setName("admin");
    mongoDbJavaTest.setRemarks("测试");
    Query query = Query.query(Criteria.where("name").is("admin"));
    mongoTemplate.find(query,MongoDbJavaTest.class);
    mongoTemplate.find(query,MongoDbJavaTest.class,"mongodb_java_test");
    mongoTemplate.findAll(MongoDbJavaTest.class);
    mongoTemplate.findAll(MongoDbJavaTest.class,"mongodb_java_test");
    mongoTemplate.query(MongoDbJavaTest.class);
}

2、插入数据

public void  mongoDbJavaSave(){
    List<MongoDbJavaTest> list = new ArrayList<>();
    MongoDbJavaTest mongoDbJavaTest = new MongoDbJavaTest();
    mongoDbJavaTest.setName("admin");
    mongoDbJavaTest.setRemarks("测试");
    list.add(mongoDbJavaTest);
//        保存对象到mongodb
    mongoTemplate.save(mongoDbJavaTest);
    mongoTemplate.insert(mongoDbJavaTest);

//        根据集合名称保存对象到mongodb
    mongoTemplate.save(mongoDbJavaTest,"mongodb_java_test");
    mongoTemplate.insert(mongoDbJavaTest,"mongodb_java_test");
//        根据集合名称保存list到mongodb
    mongoTemplate.save(list,"mongodb_java_test");
    mongoTemplate.insert(list,"mongodb_java_test");
    mongoTemplate.insert(list,MongoDbJavaTest.class);
}

3、更新数据

public void  mongoDbJavaUpdate(){
    MongoDbJavaTest mongoDbJavaTest = new MongoDbJavaTest();
    mongoDbJavaTest.setId("5d1312aeb1829c279c6c256b");
    mongoDbJavaTest.setName("admin");
    mongoDbJavaTest.setRemarks("测试");
    Query query = Query.query(Criteria.where("_id").is("5d1312aeb1829c279c6c256b"));
    Update update = Update.update("name","admin");
//        更新一条数据
    mongoTemplate.updateFirst(query,update, MongoDbJavaTest.class);
    mongoTemplate.updateFirst(query,update, "mongodb_java_test");
    mongoTemplate.updateFirst(query,update, MongoDbJavaTest.class,"mongodb_java_test");
//        根据实体更新
    mongoTemplate.update(mongoDbJavaTest.getClass());
//        更新多条数据
    mongoTemplate.updateMulti(query,update, MongoDbJavaTest.class);
    mongoTemplate.updateMulti(query,update,"mongodb_java_test");
    mongoTemplate.updateMulti(query,update, MongoDbJavaTest.class,"mongodb_java_test");
//        更新数据,如果数据不存在就新增
    mongoTemplate.upsert(query,update, MongoDbJavaTest.class);
    mongoTemplate.upsert(query,update,"mongodb_java_test");
    mongoTemplate.upsert(query,update, MongoDbJavaTest.class,"mongodb_java_test");
}

4、删除数据

public void mongoDbJavaRemove(){
    List<MongoDbJavaTest> list = new ArrayList<>();
    MongoDbJavaTest mongoDbJavaTest = new MongoDbJavaTest();
    mongoDbJavaTest.setId("5d1312aeb1829c279c6c256b");
    list.add(mongoDbJavaTest);
    Query query =           Query.query(Criteria.where("_id").in("5d1312aeb1829c279c6c256b","5d13133ab1829c29d02ce29c"));
//        根据条件删除
    mongoTemplate.remove(query);
    mongoTemplate.remove(mongoDbJavaTest);
    mongoTemplate.remove(MongoDbJavaTest.class);
//        根据条件删除(可删除多条)
    mongoTemplate.remove(query,CarryUserInfo.class);
    mongoTemplate.remove(query,MongoDbJavaTest.class,"mongodb_java_test");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值