1. 程式人生 > >MongoDB原生態API使用 + 查詢文件並顯示指定欄位

MongoDB原生態API使用 + 查詢文件並顯示指定欄位

一、pom依賴

<properties>
	<mongodb.version>3.6.3</mongodb.version>
</properties>
<dependencies>
	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>${mongodb.version}</version>
		<!--$NO-MVN-MAN-VER$-->
	</dependency>
	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>bson</artifactId>
		<version>${mongodb.version}</version>
	</dependency>
</dependencies>


二、簡單案列

全域性MongoDb操作物件

	MongoClient mongoClient = new MongoClient("localhost" , 27017);
	
	//或者使用下面的方法,使用連線字串進行構建Mongo客戶端例項
//	 MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
//	 MongoClient mongoClient = new MongoClient(connectionString);
	
	/**
	 * 一旦有了連線到MongoDB部署的MongoClient例項,就可以使用MongoClient.getdatabase()方法來訪問資料庫。
	 * 將資料庫的名稱指定到getDatabase()方法。如果資料庫不存在,MongoDB將在您第一次為該資料庫儲存資料時建立資料庫
	 * 資料庫例項不可變
	 */
	MongoDatabase database = mongoClient.getDatabase("mydb");
	
	/**
	 * 
	 * 一旦有了DB例項後,就使用它的getCollection()方法來訪問一個集合。
	 * 將集合的名稱指定到getCollection()方法。如果一個集合不存在,MongoDB將在您第一次為該集合儲存資料時建立集合。
	 */
	
	/**
	 * 例如,使用資料庫例項,下面的語句訪問mydb資料庫中的名為test的集合
	 * 集合不可變
	 */	
	MongoCollection<Document> collection = database.getCollection("test");
	
	

/**
 * 有條件取出(查詢)第一個文件物件(第一條資料)
 */
@Test
public void findOne(){
	//選擇性的顯示欄位  0:不顯示 ,1:顯示
	BasicDBObject exclude = new BasicDBObject();
	exclude.append("_id", 0);
	Document doc = collection.find().projection(exclude).first();
	System.err.println("只取【test】集合中的第一個文件物件:"+doc.toJson());
}

利用cmd查詢結果顯示如下

db.test.find().pretty()


如果我們不想顯示這個"_id"欄位,我們可以這樣做

db.test.find({},{'_id':0}).pretty()


利用api達到這種效果,就是使用find()方法後面再跟上這個方法


我們點進去看看這個方法的說明是什麼


翻譯成中文意思就是

設定描述欄位的文件,以返回所有匹配的文件

意思就是,欄位約束

我們回過頭來再來看看什麼是BasicDBObject


向這個物件新增鍵值對

比如新增一個"_id",0的鍵值對


然後把這個物件放進欄位約束的方法中,比如這樣


連著解讀就是:查詢這個collection集合中的所有文件,加個約束就是,不顯示文件的"_id"欄位,再加個條件就是隻取出第一條

我們打下斷點,看一下這個對映成MongoDB查詢語句是什麼


熟悉不,是不是對應我們的


我們還可以這樣寫,給物件新增更多的鍵值對

/**
 * 有條件取出(查詢)第一個文件物件(第一條資料)
 */
@Test
public void findOne(){
	//選擇性的顯示欄位  0:不顯示 ,1:顯示
	BasicDBObject exclude =	new BasicDBObject().append("_id", 0).append("name", 0).append("count", 0);	
	Document doc = collection.find().projection(exclude).first();
	System.err.println("只取【test】集合中的第一個文件物件:"+doc.toJson());
}

查詢效果如下


注意,給物件新增欄位的約束鍵值對的時候,一定不要混合的使用,比如


這樣的話,將會丟擲異常


記住,不帶這樣調戲MongoDB的find查詢的,你不顯示a欄位,其實就是顯示b欄位,你不要來個'a':0,'b':1,這樣簡直就是多此一舉