1. 程式人生 > >MongoDB Java基本命令使用指南

MongoDB Java基本命令使用指南

一、引入MongoDB Java Driver包

如果需要操作MongoDB的Java專案是一個Maven專案,可以在依賴中加上以下的配置。

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.13.2</version>
    </dependency>
</dependencies
>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

或者通過直接下載jar包的方式使用,下載地址:mongo-java-driver-2.13.2.jar。 
詳細的如何引入MongoDB jar包的方法可以參考官方文件

二、連線MongoDB

可以使用MongoClient來連線MongoDB,MongoClient的使用方式如下:

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("mydb");
  • 1
  • 2

上面的程式碼連線了localhost:27017上MongoDB服務,並指定使用mydb資料庫。連線後便可以對這個資料庫作進一步的操作。 
需要指出的是,MongoClient

是執行緒安全的,可以在多程程環境中共享同一個MongoClient。通常來說,一個應用程式中,只需要生成一個全域性的MongoClient例項,然後在程式的其他地方使用這個例項即可。

三、認證

可以使用多種方式對連線進行認證,下面介紹兩種方式。

1. 方式一:MongoCredential

MongoCredential類的createCredential方法可以指定認證的使用者名稱,密碼,以及使用的資料庫,並返回一個MongoCredential物件。其方法的宣告如下:

static MongoCredential createCredential(String userName, String
database, char[] password)
  • 1

例如,

MongoCredential credential = MongoCredential.createCredential("user", "mydb", "password".toCharArray();
  • 1

上面建立了一個使用者名稱為user,密碼為password,資料庫為mydb的MongoCredential物件。 
將生成MongoCredential的物件作為MongoClient建構函式的引數。由於MongoClient建構函式的為List<MongoCredential>型別,所以需要先構造成一個List再傳遞。完整的認證的例子如下:

MongoCredential credential = MongoCredential.createCredential("user", "mydb", "password".toCharArray()); 
ServerAddress serverAddress = new ServerAddress("localhost", 27017); 
MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential)); 
DB db = mongoClient.getDB("mydb");
  • 1
  • 2
  • 3
  • 4

2. 方式二:MongoClientURI

亦可以使用MongoClientURI完成MongoDB的認證,它代表了一個URI物件。MongoClientURI的建構函式接受一個String型別的字串,這個字串的格式如下:

mongodb://[username:[email protected]]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]

生成的MongoClientURI物件作為MongoClient建構函式的引數,完整的認證例子如下:

String sURI = String.format("mongodb://%s:%s@%s:%d/%s", "user", "password", "localhost", 27017, "mydb"); 
MongoClientURI uri = new MongoClientURI(sURI); 
MongoClient mongoClient = new MongoClient(uri); 
DB db = mongoClient.getDB("mydb");
  • 1
  • 2
  • 3
  • 4

四、獲取一個集合

DBCollection coll = db.getCollection("mycol");
  • 1

然後可以對指定的集合進行操作,例如,插入,刪除,查詢,更新文件等。

五、插入文件

例如,一個文件以Json來表示如下,

{ “name”: “mongo”, “info”: { “ver”: “3.0” } }

現在需要插入到集合mycol中。為了插入到集合中,可以使用BasicDBObject構造一個文件。

BasicDBObject doc = new BasicDBObject("name", "mongo").append("info", new BasicDBObject("ver", "3.0"));
coll.insert(doc);
  • 1
  • 2

六、查詢文件

1. 通過findOne查詢一個符合條件文件

通過findOne可以查詢一個符合條件的文件。例如,對於上面的mycol集合,執行以下命令:

DBObject myDoc = coll.findOne();
System.out.println(myDoc);
  • 1
  • 2

將輸出mycol集合中的第一個文件。也可以通過指定findOne的查詢引數,來查詢符合查詢條件的一個文件。

2. 通過find查詢所有符合條件的文件

find用來查詢符合條件的文件,它返回一個DBCursor物件,通過遍歷DBCursor物件,可以獲得所有符合查詢條件的文件。 
為了說明和測試,我們先插入一批以下格式的文件

{ “i”: value }

for (int i=0; i < 100; i++) {
    coll.insert(new BasicDBObject("i", i));
}
  • 1
  • 2
  • 3

find的使用示例如下:

DBCursor cursor = coll.find();
try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

會輸出mycol集合中所有的文件。 
也可以指定查詢的條件,例如:

BasicDBObject query = new BasicDBObject("i", 71);

DBCursor cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

對於查詢條件中包括$操作符的情形,例如以下一條mongo shell命令:

db.coll.find({i: {$gte: 50}});

可以使用DBObject生成查詢條件,

// find all where i >= 50
BasicDBObject query = new BasicDBObject("i", new BasicDBObject("$gte", 50));

DBCursor cursor = coll.find(query);
try {
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
} finally {
    cursor.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

七、更新文件

BasicDBObject query = new BasicDBObject("i", 70);
BasicDBObject up = new BasicDBObject("$set", new BasicDBObject("i", 100));
coll.update(query, up);
  • 1
  • 2
  • 3

上面的語句將i為70的文件更新i的值等於100。 
與我們常用的更新文件的mongo語句一樣,DBCollection還包含了savefindAndModify等更新文件的方法,其使用方法在此不再贅述,可以參考API說明文件即可。

八、刪除文件

可以通過生成一個DBObject物件來刪除指定的文件,例如:

BasicDBObject query = new BasicDBObject("i", 71);
coll.remove(query);