环境准备:

  1. mongo能够正常运行,可参考第一篇文章的介绍
  2. 如果已经有demo数据库了,建议删除,确保数据干净。

    use demo
    switched to db demo
    db.dropDatabase()
    { “dropped” : “demo”, “ok” : 1 }

本文并没有开启用户认证,直接操作。使用gradle来构建工程。(Gradle怎么使用,参考我的关于gradle介绍的文章)

创建项目 mongo ,并在根目录下面创建 build.gradle 文件

apply plugin:"java"
apply plugin:"eclipse"

repositories{
    mavenCentral()
}

dependencies{
    compile 'org.mongodb:mongo-java-driver:3.0.2'
}

此外,还要创建和maven那样约定好的源文件,暂不用test的目录

└─src
   └─main
       ├─java
       └─resources

那么我们以后的源代码会放在java目录底下,资源文件会放到resources目录底下。

下面我们就开始我们的mongo-java之旅了。

我们在mongo项目根路径 运行 > gradle cleanEclipse eclipse 来生成Eclipse的java项目。然后通过Eclipse的Import… 功能来引入我们的mongo项目,如图

D:\workspace_myeclipse\mongo>gradle cleanEclipse eclipse

HelloMongo.java的源码如下:

package com.piedra.mongo;

import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.lte;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

/**
 * HelloMongo 
 * 参考: http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/
 * @author LINWENBIN
 * @since 2015-6-6
 */
public class HelloMongo {

    /**
     * 往集合里面插入一条数据
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void insertOne(MongoCollection<Document> coll){
        /*
        {
           "name" : "MongoDB",
           "type" : "database",
           "count" : 1,
           "info" : {
                       x : 203,
                       y : 102
                     }
        }
        */
        System.out.println("insertOne 插入记录之前 users集合的数量:" + coll.count());

        Document doc = new Document("name","MongoDB")
        .append("type","database").append("count", 1).append("info", new Document("x","203").append("y","102"));

        coll.insertOne(doc);

        System.out.println("insertOne 插入记录之后 users集合的数量:" + coll.count());
    }

    /**
     * 插入多条数据
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void insertMany(MongoCollection<Document> coll){
        /*
         * 循环插入 {"i" : i}的document
         */
        List<Document> docs = new ArrayList<Document>();
        for(int i=0; i<10; i++){
            docs.add(new Document("i",i));
        }

        coll.insertMany(docs);

        System.out.println("insertMany 插入10条 {i:i} 记录之后 users集合的数量:" + coll.count());        
    }

    /**
     * 查询集合coll中的所有数据
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findAll(MongoCollection<Document> coll){
        MongoCursor<Document> cursor = coll.find().iterator();
        try {
            System.out.println("findAll 打印结果:");
            while(cursor.hasNext()){
                System.out.println(cursor.next().toJson());
            }
        } finally {
            cursor.close();
        }
    }

    /**
     * 查询满足条件的第一条数据
     * @param coll
     * @param filter
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findSpecifyDoc(MongoCollection<Document> coll, Bson filter){
        System.out.println("findSpecifyDoc 打印结果:");
        System.out.println(coll.find(filter).first().toJson());
    }

    /**
     * 查询满足条件的文档集合
     * @param coll
     * @param filter
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findDocs(MongoCollection<Document> coll, Bson filter){
        Block<Document> printBlock = new Block<Document>() {
             @Override
             public void apply(final Document document) {
                 System.out.println(document.toJson());
             }
        };
        System.out.println("findDocs 打印结果:");
        coll.find(filter).forEach(printBlock);
    }

    /**
     * 更新文档属性
     * @param coll        要操作的集合
     * @param criteria    要更新的文档过滤条件
     * @param newDoc    新的文档属性
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void update(MongoCollection<Document> coll, Bson criteria, Document newDoc){
        coll.updateMany(criteria, new Document("$set",newDoc));
    }

    /**
     * 删除文档
     * @param coll
     * @param criteria
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void delete(MongoCollection<Document> coll, Bson criteria){
        coll.deleteMany(criteria);
    }

    public static void main(String[] args) {
        HelloMongo helloMongo = new HelloMongo();

        //mongoClient实例本身代表着数据库的连接池
        MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
        /**
         * Calling the getDatabase() on MongoClient does not create a database. 
         * Only when a database is written to will a database be created
         */
        MongoDatabase db = mongoClient.getDatabase("demo");
        MongoCollection<Document> users = db.getCollection("users");


        helloMongo.insertOne(users);
        helloMongo.insertMany(users);
        helloMongo.findAll(users);
        helloMongo.findSpecifyDoc(users, eq("i",5));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        helloMongo.update(users, and(gt("i",6),lte("i",8)), new Document("ii",99));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        helloMongo.delete(users, and(gt("i",6),lte("i",8)));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        //销毁
        mongoClient.dropDatabase("demo");
        //关闭数据库连接
        mongoClient.close();
    }
}

打印结果:

insertOne 插入记录之前 users集合的数量:0
insertOne 插入记录之后 users集合的数量:1
insertMany 插入10条 {i:i} 记录之后 users集合的数量:11
findAll 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bd8" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : "203", "y" : "102" } }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bd9" }, "i" : 0 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bda" }, "i" : 1 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdb" }, "i" : 2 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdc" }, "i" : 3 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdd" }, "i" : 4 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bde" }, "i" : 5 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdf" }, "i" : 6 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be2" }, "i" : 9 }
findSpecifyDoc 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bde" }, "i" : 5 }
findDocs 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8 }
findDocs 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7, "ii" : 99 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8, "ii" : 99 }
findDocs 打印结果:

<<< 捐赠 >>>

转载请注明出处! 原文地址: http://webinglin.github.io

留言

2015-06-06