🥭mongodb学习
docker中挂载mongodb
docker run -p 27017:27017 -v /data/mongo:/data/db --name mongodb -d mongo
特别注意:挂载的/data/db目录必须要有,并确保该目录有写权
mkdir -p /data/p
💨Quick Start
数据库操作
# 查看当前指向数据库
db
# CRUD
## 插入(MAX_SIZE = 48MBp)
db.good.insert(<文档>)
### 若想插入多条数据?(插入集合)
post1 = {"title":"blog1","date":new Date()}
post2 = {"title":"blog2","date":new Date()}
post3 = {"title":"blog3","date":new Date()}
db.good.insert([
post1,post2,post3
])
## 查询
### 查一个
db.good.findOne()
### find会显示至多20条数据
## 更新
### 增加字段(增加评论字段)
post.comments = []
### 更新数据
db.good.update({title:"my blog update"},post)
## 删除
db.good.remove({title:"my blog update"})
Java开发中使用
/*
* 对于mongodb-java-driver 3.7 以下的版本适用
*/
/**********************无验证版本**********************/
// new一个mongoClient
MongoClient mongoClient = new MongoClient("<host>",<port>);
//获取mongo数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("<database_name>");
/**********************有验证版本**********************/
ServerAddress serverAddress = new ServerAddress("<host>",27017);
List<ServerAddress> addressList = new ArrayList<>();
addressList.add(serverAddress);
//mongo验证
MongoCredential credential = MongoCredential.createScramSha1Credential("username","databaseName","password".toCharArray());
List<MongoCredential> credentials = new ArrayList<>();
credentials.add(credential);
MongoClient mongoClient = new MongoClient(addressList,credentials);
MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
System.out.println("Connect successfully");
/*
* 对于mongodb-java-driver 3.7 以上的版本适用
* 仅仅是这两处的不同
*/
// 连接到 mongodb 服务
mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("192.168.216.131"))))
.build());
// 连接到数据库
mongoDatabase = mongoClient.getDatabase("testdb");
Tips:
对于mongo3.7以上的版本,java中对mongo的API完全不同
若是对 3.7 以上的版本采用新API,那么就会报nullpoint错误主要是要区分 com.mongodb.MongoClient(类) 和 com.mongodb.client.MongoClient 是接口。
报 because there was a socket exception raised by this connection. 错误是因为数据量太大,读不出来
还有可能就是未授权yml配置需要采用 authentication-database: admin 进行授权
参考资料:
mongo索引查询
/**
* @title getTxByAddress
* @description 通过地址找交易
* @author DiomChen
* @updateTime 2021/7/12 17:55
* @throws
* @测试数据:
* 17yYyafrfiaaVJGcaeQdpAeHdcBQSKAuLD
*/
@Test
public void getTxByAddress(){
Query query = new Query(Criteria
.where("address").is("17yYyafrfiaaVJGcaeQdpAeHdcBQSKAuLD"));
List<Addresstxs> addresstxsList = mongoTemplate.find(query,Addresstxs.class);
String txid = addresstxsList.get(0).getTxid();
Query query1 = new Query(Criteria
.where("txid").is(txid));
System.out.println(mongoTemplate.find(query1,Transactions.class));
}
无索引
以address建立索引
参考链接:
基本内容
- 文档:对应关系型数据库中的行,但是内部有顺序
- 集合:对应关系型数据库中的表,是有多个文档组成,对于文档内部不关心(动态模式)
数据类型
- null :{"x" : null}
- 布尔:{"x" : false}
- 数值:{"x":3}
- 字符串:{"x":"str"}
- 日期:{"x":new Date()}
- 正则表达式:{"x":/foobar/i}
- 数组:{"x":["a","b","c"]}
- 内嵌文档:{"x":{"foo","bar"}}
- 对象id:{"x":ObjectId()}
- 二进制数据:{"x":}
- 代码:{"x":function(){/* */}}