MongoDB 是一个基于分布式文件存储的数据库。
由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
mongodb是目前在IT行业非常流行的一种非关系型数据库(NoSql)
 
大纲如下:
  • Mongodb介绍/安装
  • 命令行增删改查操作
  • 客户端工具mongochef使用
  • JAVA驱动操作Mongodb
  • Spring Data Mongodb框架搭建
  • Spring Data Mongodb框架之MongoTemplate
  • Spring Data Mongodb框架之代码连接数据库
  • Spring Data Mongodb框架之去掉_class字段
  • Spring Data Mongodb框架之Repository
  • 自增ID通用设置,开发者不用关心
  • 批量更新封装
  • gridfs文件上传下载操作
  • DBRef的使用
  • mapreduce实战
  • aggregation实战
  • 项目实战:用mongodb设计以及编码实现一个权限系统

mongodb

数据结构不固定的

bson(json)

{id:1,name:"张三"}

{id:2,name:"李四",age:22,address:["上海1号","上海2号"]}

DB

集合(collection) ---> table

文档(document) ---> row

key ---> col

命令行增删改查:

show dbs 展示所有数据库

use test 进入某个数据库

db.createCollection("test"); 创建集合

show collections; 查看集合

db.test2.save({"name":"json"}) 插入数据

db.test2.find() 查询数据

db.test2.findOne() 查询第一条

db.test2.find().skip(1).limit(1)分页用法

db.test.find({}).sort({age:1}) 1升序 -1降序

db.test.find({},{age:1}) 只显示需要的字段 1为显示 -1为不显示

db.test.update({name:"kk"},{"$set":{age:11}},true,true) 第三个参数为true表示要修改的数据不存在则插入一条新的,false不修改也不创建。第四个参数为true表示修改所有满足条件的数据,false修改第一条

db.test.drop() 删除集合

db.test.remove({}) 删除集合中所有数据

JAVA驱动操作Mongodb:

package com.tangzhe.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
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;
import com.mongodb.client.model.UpdateOptions;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* Created by 唐哲
* 2018-03-10 18:00
* 测试 Java 操作 MongoDB
*/
public class MongodbTest { private MongoCollection<Document> collection = null; //@Before
public void before() {
//配置mongo客户端
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
//创建mongo客户端
MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
//获取数据库
MongoDatabase db = client.getDatabase("mamabike");
//获取集合,相当于关系型数据库中的表
collection = db.getCollection("test");
} /**
* 插入一条数据
*/
//@Test
public void insertOne() {
collection.insertOne(new Document("name", "zhangsan").append("age", 18));
} /**
* 批量插入
*/
//@Test
public void insertMany() {
List<Document> documents = new ArrayList<>(2);
documents.add(new Document("name", "张三").append("age", 19));
documents.add(new Document("name", "李四").append("age", 20));
collection.insertMany(documents);
} /**
* 修改张三的年龄为22
*/
//@Test
public void updateByName() {
collection.updateOne(Filters.eq("name", "张三"),
new Document("$set", new Document("age", 22)));
} /**
* 如果查询到则进行修改
* 如果查询不到则插入
*/
//@Test
public void updateOrInsert() {
collection.updateOne(Filters.eq("name", "lisi"),
new Document("$set", new Document("age", 23)),
new UpdateOptions().upsert(true));
} /**
* 删除一条数据
*/
//@Test
public void deleteOne() {
collection.deleteOne(Filters.eq("name", "lisi"));
} /**
* 查询第一条数据
*/
//@Test
public void findFirst() {
Document doc = collection.find().first();
System.out.println(doc);
} /**
* 查询所有
*/
//@Test
public void findAll() {
FindIterable<Document> documents = collection.find();
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} /**
* 多条件查询
*/
//@Test
public void findByQuery() {
Document doc = collection.find(
Filters.and(
Filters.eq("name", "张三"),
Filters.eq("age", 22)
))
.first();
System.out.println(doc);
} }
package com.tangzhe.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.junit.Before;
import org.junit.Test; /**
* Created by 唐哲
* 2018-03-10 19:39
*/
public class MongodbTest2 { //可以指定类型
private MongoCollection<User> collection = null; //@Before
public void before() {
//配置mongo客户端
MongoClientOptions options = MongoClientOptions.builder().connectTimeout(60000).build();
//创建mongo客户端
MongoClient client = new MongoClient(new ServerAddress("localhost", 27017), options);
//获取数据库
MongoDatabase db = client.getDatabase("mamabike"); //注册类型转换器
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UserCode())); //获取集合,相当于关系型数据库中的表
collection = db.getCollection("test", User.class).withCodecRegistry(codecRegistry);
} /**
* 插入一个javabean到mongodb
*/
//@Test
public void insertTest() {
User user = new User();
user.setName("王五");
user.setAge(33);
collection.insertOne(user);
} //从mongodb读取数据,封装成javabean
//@Test
public void findTest() {
User user = collection.find().first();
System.out.println(user);
} }
package com.tangzhe.mongodb;

import lombok.Data;
import org.bson.types.ObjectId; /**
* Created by 唐哲
* 2018-03-10 19:38
*/
@Data
public class User { private ObjectId _id;
private String name;
private Integer age; }
package com.tangzhe.mongodb;

import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext; /**
* Created by 唐哲
* 2018-03-10 19:43
* 转换器
*/
public class UserCode implements Codec<User> { @Override
public User decode(BsonReader bsonReader, DecoderContext decoderContext) {
bsonReader.readStartDocument();;
User user = new User();
user.set_id(bsonReader.readObjectId("_id"));
user.setName(bsonReader.readString("name"));
user.setAge(bsonReader.readInt32("age"));
bsonReader.readEndDocument();
return user;
} @Override
public void encode(BsonWriter bsonWriter, User user, EncoderContext encoderContext) {
bsonWriter.writeStartDocument();
bsonWriter.writeString("name", user.getName());
bsonWriter.writeInt32("age", user.getAge());
bsonWriter.writeEndDocument();
} @Override
public Class<User> getEncoderClass() {
return User.class;
} }

 

 

MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb的更多相关文章

  1. MongoDB学习笔记,基础+增删改查+索引+聚合...

    一 基础了解 对应关系 -> https://docs.mongodb.com/manual/reference/sql-comparison/ database -> database ...

  2. 【原】命令行增删改查阿里云 DNS

    命令行解析阿里云 DNS 项目地址:https://github.com/liyongjian5179/alidns 首先需要获取阿里云账号账号的AccessKeyID及AccessKeySecret ...

  3. mongodb - 命令行增删改查

    # insert db.person.insert({ }) db.person.insert({ }) db.person.insert({ }) db.person.insert({ }) # s ...

  4. MongoDB学习笔记—03 增删改查操作

    MongoDB的CURD操作分别通过函数insert().update().find().remove()进行 MongoDB文档新增与删除 MongoDB中关于文档的新增与删除比较简单.主要通过in ...

  5. MongoDB入门 常用命令以及增删改查的简单操作

    1,运行MongoDB服务mongod --dbpath=/usr/local/developmentTool/mongo/data/db/然后启动客户端mongo2,sudo service mon ...

  6. 十四:SpringBoot-配置MongoDB数据库,实现增删改查逻辑

    SpringBoot-配置MongoDB数据库,实现增删改查逻辑 1.MongoDB数据库 1.1 MongoDB简介 1.2 MongoDB特点 2.SpringBoot整合MongoDB 2.1 ...

  7. 告别无止境的增删改查--Java代码生成器

    转自:http://www.cnblogs.com/zhuYears/archive/2012/02/29/2373491.html 告别无止境的增删改查--Java代码生成器 有感于马上要做个比较大 ...

  8. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  9. mongodb的安装与增删改查

    mongodb是一款分布式的文件存储的数据库,注意这两个词,分布式和文件存储.mongodb支持复制和分片,可以合理的运用空间的大小,也可以达到容灾的目的.另外文件存储也是一个特点,抛弃了传统的表的概 ...

随机推荐

  1. AJPFX辨析Java中堆内存和栈内存的区别

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  2. 数据库(数据库、表及表数据、SQL语句)

    数据库MYSQL 今日内容介绍 u MySQL数据库 u SQL语句 第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储 ...

  3. Wrinkles should merely indicate where smiles have been.

    Wrinkles should merely indicate where smiles have been. 皱纹应该只是微笑留下的印记.

  4. TCP/IP协议分析含义与功能

    TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即网络接口层.IP层.传输层和应用层.TCP/IP是一组专业化协议,包括IP.TCP.UDP.ARP.ICMP以及其它的一些被称为子协 ...

  5. 掌握 Azure 的注册、帐户和订阅管理 Azure 上云须知

    计划使用由世纪互联运营的 Microsoft Azure 的用户,可通过下列流程注册开通并购买所需 Azure 服务:信息获取 > 试用 > 购买 > 账户/订阅管理 > 支付 ...

  6. iOS 学习随记 (一)

    入行IT也已经很多年了,厌倦了Windows平台的工作, 4月初突然抽风买了台Mac就开始决定转身做iOS/OS X下的App开发了. 从适应Mac机器到开始编程没有花费太长时间,也因为有C#和Jav ...

  7. uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)

    input 8 00000000 00000000 00001111 00001111 00011111 00111111 00111100 00111000 -8 9 14 17 22 23 44 ...

  8. [学习笔记] C++ 历年试题解析(一)--判断题

    少说话.. 程序题链接:https://www.cnblogs.com/aoru45/p/9898691.html 14级试题---选择题 1. 引用在声明时必须对其初始化,以绑定某个已经存在的变量( ...

  9. Python3之偏函数

    通过设定参数的默认值,可以降低函数调用的难度.偏函数可以做到这一点 int()函数可以把字符串转换成十进制整数,当传入字符串时,int()默认把字符串为十进制 >>> int('12 ...

  10. 用 label 控制 Pod 的位置

    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...