10月10日MongoDB学习笔记
发布时间:
本文字数:1,573 字 阅读完需:约 4 分钟
简介
MongoDB 是一个开源的文档数据库,并是领先的NoSQL数据库。
基础使用
- 使用
use 数据库名称
用于创建数据库。该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库。 - 使用
db
用于查看当前所在数据库 - 使用
show dbs
查看当前所有数据库 - 使用
db.dropDatabase()
删除当前所在的数据库。 - 使用
db.createCollection(name, options)
是用来创建集合。
name:String
要创建的集合名称
options:Document
(可选)指定有关内存大小和索引选项 - 使用
show collections
查看当前数据库中的所有集合。 - 使用
db.集合名称.drop()
用来删除一个集合。
查询
- 插入一条数据:
db.集合名称.insert({key1:val1,…..})
例:db.c_user.insert({userid: "admin", username: "administrator", age: 20, address: "shanghai"})
- 插入多条数据: 使用数组形式
例:mymovies=[{name:"my movies02"},{name:"my movies03"}]
- 使用MongoDB 的
find()
方法以非结构化的方式显示所有的文件。 - 查询指定条目
db.c_user.find({address: "changchun"})
查询c_user表中的address为changchun的所有数据db.c_user.find({address: {$ne:"changchun"}})
查询不等于changchun的数据
其他关键字:$lt
小于;$lte
小于等于 ;$gt 大于
;$gte
大于等于;$ne
不等于
多条件and
查询示例:db.c_user.find({age:{$gt: 18},address:"shanghai"})
多条件or
查询示例:db.c_user.find({$or:[{age: 18}, {age: 20}]})
查询年龄大于18且居住在上海或存储的用户:
db.c_user.find({age:{$gt:18},$or:[{address: "shanghai"},{address:"changchun"}]})
- 使用MongoDB 的
find() .pretty()
方法以结构化的方式显示所有的文件。
例:db.c_user.find().pretty()
查询c_user
表中所有数据,并格式化显示 - 使用MongoDB 的
findOne()
返回集合中的第一条文档数据。
修改
使用db.collection.update( criteria, objNew, upsert, multi )
更新现有的文档。
Criteria 更新操作的条件,类似于SQL语句中的where字句
objNew update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
Upsert 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
例: db.c_user.update({username:"zhangsan"},{$set:{age:22}}, false, true)
将用户名为张三的数据的年龄修改为22,false
的意思指若无数据,是否添加,true的意思是否更新所有记录
删除
MongoDB的 remove(deletion criteria, justOne)
方法用于从集合中删除文档。remove() 方法接受两个参数。
deletion criteria :(可选)删除标准,根据文件将被删除。
justOne : (可选)如果设置为true或1,然后只删除一个文件。
示例删除address为changchun的user:
db.c_user.remove({address: "changchun"})
投影
mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整体。如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段。
MongoDB 的find()方法,在MongoDB查询文档接受的第二个可选参数是要检索的字段列表。
在MongoDB中,当执行find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值1或0。 1用来显示字段而0是用来隐藏字段。
例: db.c_user.find({age:{$gt: 18}},{_id:0, userid:1, username: 1})
限制记录
要限制 MongoDB 中的记录,需要使用 limit()
方法。 limit()
方法接受一个数字型的参数,这是要显示的文档数。如果不指定数量 limit()
方法的参数,它会显示从集合中的所有文件。
db.infos.find().limit(2)
除了limit()
方法,还有一个方法skip()
也接受数字类型的参数,并使用跳过的文档数。默认值skip()方法是0
db.infos.find().limit(1).skip(1)
分页
Skip()+Limit()
实现文档数据分页显示
操作:分页显示用户数据,每页显示2条数据(pageSize=2)
pageSize: 单页显示的文档个数,使用limit(pageSize)控制
skip是第(n-1)*pageSize
,n代表页数
显示第1页数据 limit(pageSize) skip((1-1)*pageSize)
db.infos.find(). limit(2).skip(0)
显示第2页数据 limit(pageSize) skip((2-1)*pageSize)
db.infos.find(). limit(2). skip(2)
排序
要在 MongoDB 中的文档进行排序,需要使用sort()
法。 sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序。要指定排序顺序1和-1。 1用于升序排列,而-1用于降序。
操作:按照年龄降序排列用户信息
db.infos.find().sort({age:-1})
java连接MongoDb示例
导入依赖
pom.xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.11</version>
</dependency>
操作示例
package com.zr;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
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;
public class MongoDBJDBC {
public static void main(String args[]) {
// deleteDocument();
// getCollection();
// insertDocuments();
// createCollection();
getAllDocument();
}
// 创建集合
public static void createCollection() {
try {
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient("localhost", 27017);
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
mongoDatabase.createCollection("test");
System.out.println("集合创建成功");
mongoClient.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
// 获取集合
public static void getCollection() {
try {
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient("localhost", 27017);
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合test选择成功:" + collection);
mongoClient.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
// 插入文档
public static void insertDocuments() {
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 选择成功");
//插入文档
/**
* 1. 创建文档 org.bson.Document 参数为key-value的格式
* 2. 创建文档集合List<Document>
* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
* */
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("by", "ZR");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文档插入成功");
mongoClient.close();
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
//检索所有文档
public static void getAllDocument() {
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 选择成功");
//检索所有文档
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
mongoClient.close();
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
public static void updateDocument() {
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 选择成功");
//更新文档 将文档中likes=100的文档修改为likes=200
collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));
//检索查看结果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
mongoClient.close();
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
public static void deleteDocument() {
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb");
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 选择成功");
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq("likes", 200));
//删除所有符合条件的文档
collection.deleteMany (Filters.eq("likes", 200));
//检索查看结果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
mongoClient.close();
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}