mongoDB的简单应用
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
该文章大量文字摘自:MongoDB 教程 | 菜鸟教程 (runoob.com)
mongodb中的概念
database:数据库
collection:集合,对应sql中的数据库表(table)
document:文档,对应sql中的数据(data)
field:域,对应sql中的数据列(column)
index:索引
primary key:主键,MongoDB自动将_id字段设置为主键
安装
Windows
下载地址:https://www.mongodb.com/download-center/community
下载.msi版本,点击选择安装路径点击下一步即可
数据库
连接数据库
标准 URI 连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
比如:
mongodb://localhost:27017 # 连接到本机的27017端口的Mongodb数据库
mongodb://root:1234@localhost/test # 使用用户名(root)和密码(1234)连接登录到指定数据库(test)
mongodb://localhost/?safe=true # 以安全模式连接到数据库,端口不写默认27017
问号后面的选项为:
选项 | 描述 |
---|---|
replicaSet=name | 验证replica set的名称。 Impliesconnect=replicaSet. |
slaveOk=true|false | true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。 |
safe=true|false | true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS).false: 在每次更新之后,驱动不会发送getLastError来确保更新成功。 |
w=n | 驱动添加 { w : n } 到getLastError命令. 应用于safe=true。 |
wtimeoutMS=ms | 驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true. |
fsync=true|false | true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true.false: 驱动不会添加到getLastError命令中。 |
journal=true|false | 如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true |
connectTimeoutMS=ms | 可以打开连接的时间。 |
socketTimeoutMS=ms | 发送和接受sockets的时间。 |
增
use test
注意:NoSQL不能像mysql一样,使用use 数据库 之后添加新的集合之后才会出现名字
删
db.dropDatabase()
查
show databases
数据表/集合
增
db.createCollection("test")
删
db.test.drop()
查
show tables
数据记录行/文档
增
db.test.insert({title: 'MongoDB'})
删
删除所有数据
db.test.remove({})
删除指定数据
db.test.remove({'title':'MongoDB'})
查
查找全部
db.test.find().pretty()
查找指定数据
db.test.find({"by":"test", "title":"MongoDB"}).pretty()
等于:db.col.find({"by":"test"}).pretty()
小于:db.col.find({"likes":{$lt:50}}).pretty()
小于或等于:db.col.find({"likes":{$lte:50}}).pretty()
大于:db.col.find({"likes":{$gt:50}}).pretty()
大于或等于:db.col.find({"likes":{$gte:50}}).pretty()
不等于:db.col.find({"likes":{$ne:50}}).pretty()
改
db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB'}})
操作符
$type:检索集合中匹配的数据类型
db.col.find({"title" : {$type : 'string'}})
其他方法
limit:读取指定数量的数据记录
db.col.find({},{"title":1,_id:0}).limit(2)
skip:跳过指定数量的数据
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
sort:数据进行排序
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
"likes"是字段;1是升序,-1是降序
索引
创建
db.test.createIndex({"title":1})
语法中"title"值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
查看集合索引
db.test.getIndexes()
查看集合索引大小
db.test.totalIndexSize()
删除集合所有索引
db.test.dropIndexes()
删除集合指定索引
db.test.dropIndex("索引名称")
SQL转换Nosql
该章节是为了直观感受MongoDB中,调用的命令与sql对应关系。以test表为例:
SHOW DATABASES;
DROP DATABASE test;
db.dropDatabase()
CREATE DATABASE test;
use test;
SHOW TABLES;
DROP TABLE test;
db.test.drop()
CREATE TABLE test({
id INT PRIMARY KEY AUTO_INCREMENT,
name string
});
db.createCollection("test")
SELECT * FROM test;
db.test.find().pretty()
SELECT COUNT(*) FROM test;
db.test.count();
SELECT * FROM test WHERE id = 1;
db.test.find({"id" : 1}).pretty()
SELECT * FROM test WHERE id < 1;
db.col.find({"id":{$lt:1}}).pretty()
SELECT * FROM test WHERE id <= 1;
db.col.find({"id":{$lte:50}}).pretty()
SELECT * FROM test WHERE id > 1;
db.col.find({"id":{$gt:50}}).pretty()
SELECT * FROM test WHERE id >= 1;
db.col.find({"id":{$gte:50}}).pretty()
SELECT * FROM test WHERE id != 1;
db.col.find({"id":{$ne:1}}).pretty()
SELECT * from test WHERE name LIKE '%l%';
db.users.find({"name":/l/});
SELECT * from test WHERE name LIKE 'l%';
db.users.find({"name":/^l/});
SELECT * from test ORDER BY id DESC/ASC;
db.col.find().sort({"id":-1/1})
SELECT * FROM test WHERE id = 1 LIMIT 2;
db.test.find({"id" : 1}).limit(2)
SELECT COUNT(*) FROM USER WHERE type = "book"
var map1 = function () {emit(this.type, 1)};
var reduce = function(type , count){return Array.sum(count)}
db.test.mapReduce(map1 , reduce , {query:{type : "book"} , out:"test"}).find()
INSERT INTO test (id , name) VALUES (1 , li);
db.test.insert({"id" : 1,"name": 'li'})
UPDATE test SET name = 'li' WHERE id = 1;
db.test.update({'name':'li'},{$set:{'id':1}})
DELETE FROM test WHERE id = 1;
db.test.remove({'id': 1 })
链接java
引入依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.1.1</version>
</dependency>
链接到数据库
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
MongoDBJDBC {
public static void main(String args[]){
try{
MongoClient mongoClient =new MongoClient(“ localhost”,27017);
//连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mysql");
System.out.println(“成功连接到数据库”);
mongoDatabase.createCollection("test");
System.out.println("集合创建成功");
MongoCollection <Document> collection = mongoDatabase.getCollection("test");
FindIterable<Document> list = collection.find();//获取文档集合
for(Document doc: list){//遍历集合中的文档输出数据
System.out.println("name:"+ doc.getString("name") );
System.out.println("sex:"+ doc.getString("sex") );
System.out.println("age:"+ doc.getDouble("age") );//默认为浮点型
System.out.println("address:"+ doc.getString("address") );
System.out.println("--------------------------");
}
Map<String, Object> map=new HashMap();
map.put("name", "铁扇公主");
map.put("sex", "女");
map.put("age", 35.0);
map.put("address", "芭蕉洞");
Document doc=new Document(map);
collection.insertOne(doc);//插入一条记录
BasicDBObject bson=new BasicDBObject("name", "铁扇公主");
collection.deleteOne(bson);//删除记录(符合条件的第一条记录)
//修改的条件
BasicDBObject bson= new BasicDBObject("name", "红孩儿");
//修改后的值
BasicDBObject bson2 = new BasicDBObject("$set",new BasicDBObject("address", "南海"));
//参数1:修改条件 参数2:修改后的值
collection.updateOne(bson, bson2);
} catch(Exception e){
System.err.println(e.getClass()。getName()+“:” + e.getMessage());
}
}
}