[root@HadoopNode00 ~]# tar -zxvf mongodb-linux-x86_64-3.6.2.tgz -C /usr/
mongodb-linux-x86_64-3.6.2/README
mongodb-linux-x86_64-3.6.2/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-3.6.2/MPL-2
mongodb-linux-x86_64-3.6.2/GNU-AGPL-3.0
mongodb-linux-x86_64-3.6.2/bin/mongodump
mongodb-linux-x86_64-3.6.2/bin/mongorestore
mongodb-linux-x86_64-3.6.2/bin/mongoexport
mongodb-linux-x86_64-3.6.2/bin/mongoimport
mongodb-linux-x86_64-3.6.2/bin/mongostat
mongodb-linux-x86_64-3.6.2/bin/mongotop
mongodb-linux-x86_64-3.6.2/bin/bsondump
mongodb-linux-x86_64-3.6.2/bin/mongofiles
mongodb-linux-x86_64-3.6.2/bin/mongoreplay
mongodb-linux-x86_64-3.6.2/bin/mongoperf
mongodb-linux-x86_64-3.6.2/bin/mongod
mongodb-linux-x86_64-3.6.2/bin/mongos
mongodb-linux-x86_64-3.6.2/bin/mongo
mongodb-linux-x86_64-3.6.2/bin/install_compass
[root@HadoopNode00 ~]# cd /usr/
[root@HadoopNode00 usr]# ls
azkaban-exec-server azkaban-web-server etc include lib64 local sbin spark-2.4.3 tmp
azkaban-solo-server bin games lib libexec mongodb-linux-x86_64-3.6.2 share src
[root@HadoopNode00 usr]# cd mongodb-linux-x86_64-3.6.2/
[root@HadoopNode00 mongodb-linux-x86_64-3.6.2]# ls
bin GNU-AGPL-3.0 MPL-2 README THIRD-PARTY-NOTICES
[root@HadoopNode00 mongodb-linux-x86_64-3.6.2]# cd bin/
[root@HadoopNode00 bin]# ls
bsondump install_compass mongo mongod mongodump mongoexport mongofiles mongoimport mongoperf mongoreplay mongorestore mongos mongostat mongotop
[root@HadoopNode00 bin]# mkdir -p /data/db
[root@HadoopNode00 bin]# ls
bsondump install_compass mongo mongod mongodump mongoexport mongofiles mongoimport mongoperf mongoreplay mongorestore mongos mongostat mongotop
[root@HadoopNode00 bin]# cd ..
[root@HadoopNode00 mongodb-linux-x86_64-3.6.2]# ls
bin GNU-AGPL-3.0 MPL-2 README THIRD-PARTY-NOTICES
[root@HadoopNode00 mongodb-linux-x86_64-3.6.2]# bin/mongod --port 27017 --bind_ip_all --dbpath /data/db
2020-02-29T12:21:41.867+0800 I CONTROL [initandlisten] MongoDB starting : pid=93427 port=27017 dbpath=/data/db 64-bit host=HadoopNode00
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] db version v3.6.2
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] git version: 489d177dbd0f0420a8ca04d39fd78d0a2c539420
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] allocator: tcmalloc
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] modules: none
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] build environment:
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] distarch: x86_64
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] target_arch: x86_64
2020-02-29T12:21:41.868+0800 I CONTROL [initandlisten] options: { net: { bindIpAll: true, port: 27017 }, storage: { dbPath: "/data/db" } }
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten]
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=256M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2020-02-29T12:21:51.456+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-02-29T12:21:51.456+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.459+0800 I STORAGE [initandlisten] createCollection: admin.system.version with provided UUID: 6cc3e154-d391-4e4e-b260-23c273d15e95
2020-02-29T12:21:51.571+0800 I COMMAND [initandlisten] setting featureCompatibilityVersion to 3.6
2020-02-29T12:21:51.577+0800 I STORAGE [initandlisten] createCollection: local.startup_log with generated UUID: 1778b7ff-37b5-4afa-a5e2-71f7c746574e
2020-02-29T12:21:52.418+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2020-02-29T12:21:52.434+0800 I NETWORK [initandlisten] waiting for connections on port 27017
[root@HadoopNode00 mongodb-linux-x86_64-3.6.2]# bin/mongo 127.0.0.1:27017
MongoDB shell version v3.6.2
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.6.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten]
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-02-29T12:21:42.039+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-02-29T12:21:51.455+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2020-02-29T12:21:51.456+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-02-29T12:21:51.456+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-02-29T12:21:51.457+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten]
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-02-29T12:21:51.458+0800 I CONTROL [initandlisten]
2020-02-29T12:25:37.241+0800 E - [main] Error loading history file: FileOpenFailed: Unable to fopen() file /root/.dbshell: No such file or directory
show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
show databases;
admin 0.000GB
config 0.000GB
local 0.000GB
db
test
use admin;
switched to db admin
db
admin
help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries wit h time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memor y, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to f urther iterate
DBQuery.shellBatchSize = x set default number of items to display on s hell
exit quit the mongo shell
use baizhi #創建數據庫
switched to db baizhi
db.users.insertOne({"name":"aa", "sex":"男","age":18})
db.users.insertOne({"name":"bb", "age":25})
db.users.insertOne({"name":"ww"})
db.users.insertMany([{"name":"zl"},{"name":"tq"},{"name":"win7"}])
// 删除第一条符合条件的结果
db.users.deleteOne("name", "win7")
// 删除所有的符合条件的结果
db.user.deleteMany("name", "win7")
db.users.deleteMany({"name":"zs", "sex":"男"})
// 删除ls 或者 ww $or是操作符
db.users.deleteMany({"$or": [{"name":"ls"},{"name":"ww"}]})
// 查所有
db.users.find()
db.users.find({"name":"tq"})
db.users.find({"name":"tq"},{"_id":1,"name":1})
// 或查询
db.users.find({"$or":[{"name":"zs"},{"name":"ls"}]})
// 范围查询
db.users.find({"age":{"$gt":15,"$lt":30}})
db.users.find({"age":{"$ne":18}})
// 模糊查询
db.users.find({"name":/w/})
// 正则查询
db.users.find({"name":{"$regex":/^z.*/}})
// 枚举查询
db.users.find({"name":{"$in":["tq","ls"]}})
// -1:降序 1:升序
db.users.find().sort({"_id":-1})
// skip:行下标 limit:每页显示的条数
db.users.find().skip(0).limit(2)
//
db.users.find({"append_comment.1":"1楼是傻逼"})
// 修改
db.users.update({"name":"aa"},{"$set":{"age":28}})
//
db.users.update({"name":"aa"},{"$set":{"age":28}})
db.places.insert( {
name: "清华大学",
location: { type: "Point", coordinates: [ 116.330105,40.010497 ] },
category: "Parks"
} );
db.places.insert( {
name: "北京大学",
location: { type: "Point", coordinates: [ 116.322918,40.021217 ] },
category: "Parks"
} );
db.places.insert( {
name: "中国人民大学",
location: { type: "Point", coordinates: [ 116.319181,39.976446 ] },
category: "Stadiums"
} );
db.places.insert( {
name: "北京科技大学",
location: { type: "Point", coordinates: [ 116.366037,39.996348 ] },
category: "Stadiums"
} );
#创建球面索引
db.places.createIndex( { location: "2dsphere" } )
db.places.find(
{
location:
{ $near:
{
$geometry: { type: "Point", coordinates: [ 116.330105,40.010497 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)
MongoDB操作 CRUD操作
db.users.insert({“name”:“aa”,“sex”:“男”,“age”:18}) db.users.insert({“name”:“bb”,“age”:25}) db.users.insert({“name”:“赵日天”,“comment:”:“很好吃”,“append_comment”:[{“1楼”:“好吃个毛线”},{“2楼”:“1 楼是傻逼”}]}) db.users.insertOne({“name”:“ww”}) db.users.insertMany([{“name”:“zl”},{“name”:“tq”},{“name”:“wb”}]} # 等价于 delete from users where name = ‘wb’ # deleteone只会删除第一个条符合条件的结果 db.users.deleteOne({“name”:“wb”}) # deletemany会删除所有符合条件的结果 db.users.deleteMany({“name”:“wb”}) # 删除名字叫做zs并且性别是男性的用户信息 db.users.deleteMany({“name”:“zs”,“sex”:“男”}) # 删除名字叫做ls或者ww的用户信息信息 KaTeX parse error: Expected '}', got 'EOF' at end of input: …s.deleteMany({"or":[{“name”:“ls”},{“name”:“ww”}]}) # 查所有 db.users.find() db.users.find({}) # 等值查询 where 条件查询 投影查询(指定返回的结果字段) # select id,name from t_user db.users.find({“name”:“赵日天”},{"_id":1,“name”:1}) # or查询 db.users.find({"$or":[{“name”:“zs”},{“name”:“ls”}]}) # 范围查询 查询年龄在15岁到30岁之间的用户 $lt $gt $lte $gte $ne KaTeX parse error: Expected '}', got 'EOF' at end of input: ….find({"age":{"gte":18,“KaTeX parse error: Expected 'EOF', got '}' at position 7: lt":30}̲}) db.users.fin…ne”:18}}) db.users.find({“age”:18}) # 模糊查询 # 名字中包含s的相关用户 db.users.find({“name”:/s/}) # 使用正则查询名字以z开头的相关用户 db.users.find({“name”:{"$regex":/^z.*/}})
地理位置查询
枚举查询 in # 查询名字是zs或者ls的相关用户 select * from t_user where name in[‘zs’,‘ls’] db.users.find({“name”:{"$in":[“zs”,“ls”]}}) # 排序 order by 排序规则:升序 1 降序 -1
db.users.find().sort({"_id":-1}) # 分页 skip: 行下标 (nowPage-1)pageSize limit: 每页显示的结果条数 db.users.find().skip(4).limit(2) # 根据append_comment中1楼是傻逼查询 db.users.find({“append_comment.1”:“1楼是傻逼”}) # 将名字aa用户年龄修改为28岁 KaTeX parse error: Expected '}', got 'EOF' at end of input: …"name":"aa"},{"set":{“age”:28}}) db.users.updateMany({“name”:“aa”},{"$inc":{“age”:3}}) # 地理位置查询 实现附近的景点 db.places.insert( { name: “圆明园”, location: { type: “Point”, coordinates: [ 116.310701,40.01547 ] }, category: “Parks” } ); db.places.insert( { name: “清华大学”, location: { type: “Point”, coordinates: [ 116.318966,40.015581] }, category: “Parks” } ); db.places.insert( { name: "后海望海楼 ", location: { type: “Point”, coordinates: [ 116.392842,39.949265] }, category: “Parks” } ); db.places.insert( { name: “天安门 “, location: { type: “Point”, coordinates: [ 116.403874,39.916734] }, category: “Parks” } ); # 创建球面索引 db.places.createIndex( { location: “2dsphere” } ) # 根据提供的坐标点 查询符合条件的数据
聚合管道
GridFS Note: GridFS特别适合流媒体存储,如视频、音频文件等
Spring Data MongoDB
db.places.find( { location: { $near: { $geometry: { type: “Point”, coordinates: [116.344549,39.998573 ] }, $minDistance: 0, KaTeX parse error: Expected 'EOF', got '}' at position 19: …Distance: 5000 }̲ } } )# 聚合管道 db…match”:{}},{“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{_id:"sex”,avg:{
a
v
g
:
"
avg:"
avg:"total_money”}}}]) # MapReduce # 通过MR程序计算男性或者女性的平均消费能力 db.orders.mapReduce(function(){emit(this.sex,this.total_money)},function(key,values){return Array.avg(values)},{query:{},out:“order_result”}) # GridFS [root@hadoop mongodb-linux-x86_64-3.6.2]# bin/mongofiles --host 127.0.0.1 --port 27017 put ~/nginx-1.14.2.tar.gz 2019-03-28T15:33:51.431+0800 connected to: 127.0.0.1:27017 added file: /root/nginx-1.14.2.tar.gz [root@hadoop mongodb-linux-x86_64-3.6.2]# bin/mongofiles --host localhost --port 27017 get_id ‘ObjectId(“5c9c78df0238775a0660084d”)’ 2019-03-28T15:41:09.191+0800 connected to: localhost:27017
finished writing to: /root/nginx-1.14.2.tar.gz
Maven标签 准备Spring配置文件 创建实体类 配置映射关系
org.springframework.data spring-data-mongodb 2.0.13.RELEASE <?xml version="1.0" encoding="UTF-8"?>
<mongo:mongo-client host=“192.168.11.131” port=“27017” id=“mongoClient”> </mongo:mongo-client>
<mongo:db-factory dbname=“baizhi” mongo-ref=“mongoClient”/>
package com.baizhi.entity; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.mongodb.core.mapping.Document; import java.io.Serializable; import java.util.Date; // 实体对象映射的集合信息 @Document(collection = “persons”) public class Person implements Serializable { @Id private String id;
private String name; private Double salary; private Date birthday; public Person() { }// 从mongodb中恢复数据时调用的构造方法 @PersistenceConstructor public Person(String id, String name, Double salary, Date birthday) { this.id = id; this.name = name; this.salary = salary; this.birthday = birthday; }@Override public String toString() { return “Person{” + “id=” + id + “, name=’” + name + ‘’’ + “, salary=” + salary + “, birthday=” + birthday + ‘}’; }public String getId() { return id; }public void setId(String id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public Double getSalary() { return salary; }public void setSalary(Double salary) { this.salary = salary; }
创建自定义的Repository 或者创建自定义方法 public Date getBirthday() { return birthday; }public void setBirthday(Date birthday) { this.birthday = birthday; } }package com.baizhi.dao; import com.baizhi.entity.Person; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; @Repository public interface CustomRepository extends MongoRepository<Person,String> { }package com.baizhi.dao; import com.baizhi.entity.Person; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; import java.util.List; /** 自定义方法 实现对mongodb的操作 * 符合mongodb规范 无需写方法的实现 / @Repository public interface CustomRepository2 extends MongoRepository<Person,String> { /** db.persons.find({“name”:值}) * @param name * @return / public List findByName(String name); /** 根据关键字模糊查询 * @param keyword * @return
测试 */ public List findByNameLike(String keyword); }package com.baizhi.test; import com.baizhi.dao.CustomRepository; import com.baizhi.dao.CustomRepository2; import com.baizhi.entity.Person; import com.mongodb.client.result.UpdateResult; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import java.util.Arrays; import java.util.Date; import java.util.List; public class SpringDataMongoTest { public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(“classpath:applicationContext.xml”); CustomRepository repository = applicationContext.getBean(CustomRepository.class); CustomRepository2 repository2 = applicationContext.getBean(CustomRepository2.class); MongoTemplate mongoTemplate = applicationContext.getBean(MongoTemplate.class); // 新增一条记录 //repository.save(new Person(null,“zs”,1000D,new Date())); //repository.saveAll(Arrays.asList(new Person(null,“ls”,2000D,new Date()),new Person(null,“ww”,3000D,new Date()))); // 删除一条记录 //repository.delete(new Person(“5c9c85a108e9eb15f4c0a693”,null,null,null)); // 查询 // List persons = repository.findAll(); // 排序 // List persons = repository.findAll(Sort.by(Sort.Direction.DESC,“salary”)); // persons.forEach(p -> System.out.println§); // 分页 // Page page = repository.findAll(new PageRequest(0, 1)); //System.out.println(“总页数:”+page.getTotalPages()); // page.forEach(person -> System.out.println(person));
Spring Boot 整合MongoDB
pom.xml // 修改 //repository.save(new Person(“5c9c854c08e9eb1b946c8064”,“zs”,2500d,new Date())); // 自定义方法测试 // List people = repository2.findByName(“zs”); // List people = repository2.findByNameLike(“s”); // System.out.println(people); // 第三种操作方法 // 查询工资在2000到3000元之间的相关用户 // Query query = Query.query(Criteria.where(“salary”).gte(2000D).lte(3000)); // List people = mongoTemplate.find(query, Person.class); // people.forEach( person -> System.out.println(person)); // 修改用户名字叫做zs或者ls的工资3500 Query query = Query.query(Criteria.where(“name”).in(“zs”,“ls”)); System.out.println(query.getQueryObject().toString()); Update update = Update.update(“salary”,3500D); UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Person.class); System.out.println(updateResult.getModifiedCount()); } }<?xml version="1.0" encoding="UTF-8"?> <project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd”> 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE
com.baizhi springboot_mongodb 0.0.1-SNAPSHOT springboot_data Demo project for Spring Boot <java.version>1.8</java.version>
application.properties 其余操作方式同Spring Data MongoDB
… MongoDB集群
org.springframework.boot spring-boot-starter-data-mongodb org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin spring.data.mongodb.database=baizhi spring.data.mongodb.host=192.168.11.131 spring.data.mongodb.port=27017