今天使用java代码调用mongodb数据库,用maven引入了最新版的mongodb驱动,在网上找了demo结果发现将demo贴到eclipse上之后好多过期方法。所以猜想mongodb驱动版本肯定有很大的更新。
果不其然,mongodb的确有了最新版3.x。而网上几乎所有的demo都基于2.x版本。下面是在github上找的一些资料,再结合官方文档总结的3.x版本的CRUD操作。
以下演示源码地址:https://github.com/smallbug-vip/repo
首先在pom.xml中配置引入jar包:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.2.1</version> </dependency>
下面演示会使用到一些静态方法,eclipse中使用快捷键不能自动导包,可以手动添加:
import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.exists;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.gte;
import static com.mongodb.client.model.Filters.lt;
import static com.mongodb.client.model.Filters.lte;
import static com.mongodb.client.model.Projections.excludeId;
import static com.mongodb.client.model.Projections.include;
import static com.mongodb.client.model.Sorts.descending;
准备工作:
MongoDatabase db = null;
MongoClient client = null;
@Before
public void before() {
client = new MongoClient("192.168.88.132", 27017);
db = client.getDatabase("its");
}
@After
public void after() {
if (client != null) {
client.close();
}
}
获取连接:
@Test
public void testCollections() {
MongoIterable<String> collections = db.listCollectionNames();
MongoCursor<String> cu = collections.iterator();
for (; cu.hasNext();) {
System.out.println(cu.next());
}
}
测试增加一个Document:
@Test
public void testAdd() {
MongoCollection<Document> col = db.getCollection("s1");
Document doc = new Document("name", "MongoDB")//
.append("type", "database")//
.append("count", 1)//
.append("info", new Document("x", 203).append("y", 102));
col.insertOne(doc);
}
测试增加多个Document:
@Test
public void testAddALL() {
MongoCollection<Document> col = db.getCollection("s1");
List<Document> dos = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
dos.add(new Document("i", i));
}
col.insertMany(dos);
}
查看当前有多少记录:
@Test
public void testCount() {
MongoCollection<Document> col = db.getCollection("s1");
System.out.println(col.count());
}
获取第一条记录:
@Test
public void testFirst() {
MongoCollection<Document> col = db.getCollection("s1");
Document myDoc = col.find().first();
System.out.println(myDoc.toJson());
}
获取第所有记录:
@Test
public void testFindAll() {
MongoCollection<Document> col = db.getCollection("s1");
/**************** 第一种方法 *********************/
// MongoCursor<Document> cursor = col.find().iterator();
// while (cursor.hasNext()) {
// System.out.println(cursor.next().toJson());
// }
/**************** 第二种方法 *********************/
for (Document cur : col.find()) {
System.out.println(cur.toJson());
}
}
分页:
@Test
public void testLimit() {
MongoCollection<Document> col = db.getCollection("s1");
for (Document cur : col.find().skip(20).limit(10)) {
System.out.println(cur.toJson());
}
}
条件查询:
@Test
public void testFilter() {
MongoCollection<Document> col = db.getCollection("s1");
// eq为静态导入
Document myDoc = col.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
}
获得子集:
@Test
public void testBlock() {
MongoCollection<Document> col = db.getCollection("s1");
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
};
col.find(and(gt("i", 50), lte("i", 80))).forEach(printBlock);
}
排序:
@Test
public void testSort() {
MongoCollection<Document> col = db.getCollection("s1");
// 升序 ascending
FindIterable<Document> it = col.find(exists("i")).sort(descending("i"));
for (Document d : it) {
System.out.println(d.toJson());
}
}
筛选字段:
@Test
public void testProjection() {
MongoCollection<Document> col = db.getCollection("s1");
FindIterable<Document> it = col.find()//
.projection(and(include("name"), excludeId()));
for (Document d : it) {
System.out.println(d.toJson());
}
}
更新一条Document:
@Test
public void testUpdateOne() {
MongoCollection<Document> col = db.getCollection("s1");
col.updateOne(//
eq("i", 10), new Document("$set", new Document("i", 110)));
}
更新多条记录:
@Test
public void testUpdateMany() {
MongoCollection<Document> col = db.getCollection("s1");
// $inc 自增
UpdateResult updateResult = col.updateMany(lt("i", 10), new Document("$inc", new Document("i", 234)));
System.out.println(updateResult.getModifiedCount());
}
测试删除一条Document:
@Test
public void testDeleteOne() {
MongoCollection<Document> col = db.getCollection("s1");
DeleteResult re = col.deleteOne(eq("i", 234));
System.out.println(re.getDeletedCount());
}
测试删除多条Document:
@Test
public void testDeleteMany() {
MongoCollection<Document> col = db.getCollection("s1");
DeleteResult deleteResult = col.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
}