導航:首頁 > 編程語言 > mongodbjava類

mongodbjava類

發布時間:2023-07-11 06:01:20

A. 怎麼使用java操作mongodb更新整個文檔

上篇博客介紹了java操作mongoDB進行對文件的處理。現在來介紹一下對文檔的處理。和對文件的處理一樣,也是通過java驅動中提供的幾個類相互作用完成的。這幾個類分別是:
DBCollection類:指定資料庫中指定集合的實例,提供了增刪改查等一系列操作。在關系型資料庫中,對數據的增刪改查操作是建立在表的基礎上的,在mongodb中是建立在集合的基礎上進行的。
DBObject介面:DBObject是鍵值的映射,因此,可以將DBObject的實現類作為查詢的返回結果,也可以作為查詢條件
DBCursor:游標,返回結果的集合。
下面是部分實例:

[java] view plain
Mongo mongo = new Mongo();
DB db = mongo.getDB("myMongoDB");
DBCollection course = db.getCollection("course");//對myMongoDB資料庫中course集合進行操作

//添加操作
//下面分別是創建文檔的幾種方式:1. .append() 2. .put() 3. 通過map 4. 將json轉換成DBObject對象
DBObject english = new BasicDBObject().append("name","english").append("score", 5).append("id",1);
course.insert(english);

DBObject math = new BasicDBObject();
math.put("id", 2);
math.put("name", "math");
math.put("score", 10);
course.insert(math);

Map<String,Object> map = new HashMap<String,Object>();
map.put("name","physics" );
map.put("score", 10);
map.put("id", 3);
DBObject physics= new BasicDBObject(map);
course.insert(physics);

String json ="{'name':'chemistry','score':10,'id':4}";
DBObject chemistry =(DBObject)JSON.parse(json);
course.insert(chemistry);

List<DBObject> courseList = new ArrayList<DBObject>();
DBObject chinese = new BasicDBObject().append("name","chinese").append("score", 10).append("id", 5);
DBObject history = new BasicDBObject().append("name", "history").append("score", 10).append("id", 6);
courseList.add(chinese);
courseList.add(history);
course.insert(courseList);

//添加內嵌文檔
String json2 =" {'name':'english','score':10,'teacher':[{'name':'柳松','id':'1'},{'name':'柳鬆鬆','id':2}]}";
DBObject english2= (DBObject)JSON.parse(json);
course.insert(english2);

List<DBObject> list = new ArrayList<DBObject>();
list.add(new BasicDBObject("name","柳松").append("id",1));
list.add(new BasicDBObject("name","柳鬆鬆").append("id",2));
DBObject english3= new BasicDBObject().append("name","english").append("score",10).append("teacher",list);

//查詢
//查詢所有、查詢一個文檔、條件查詢
DBCursor cur = course.find();
while(cur.hasNext()){
DBObject document = cur.next();
System.out.println(document.get("name"));
}

DBObject document = course.findOne();
String name=(String)document.get("name");
System.out.println(name);

//查詢學分=5的
DBObject query1 = new BasicDBObject("score",5);
DBObject query2 = new BasicDBObject("score",new BasicDBObject("$gte",5));
DBCursor cur2 = course.find(query2);
//條件表達式:$ge(>) $get(>=) $lt(<) $lte(<=) $ne(<>) $in $nin $all $exists $or $nor $where $type等等

//查找並修改
DBObject newDocument = course.findAndModify(new BasicDBObject("score",5), new BasicDBObject("score",15));

//更新操作
//q:更新條件 o:更新後的對象
course.update(new BasicDBObject("score",10), new BasicDBObject("test",15));
course.update(new BasicDBObject("score",15), new BasicDBObject("$set",new BasicDBObject("isRequired",true)));
//兩個的區別是,第一個更新是將{"test":15}這個文檔替換原來的文檔,
//第二個更新添加了條件表達式$set,是在原來文檔的基礎上添加"isRequired"這個鍵
//條件表達式:$set $unset $push $inc $push $push $addToSet $pull $pullAll $pop等等

//當_id相同時,執行save方法相當於更新操作
course.save(new BasicDBObject("name","math").append("_id", 1));
course.save(new BasicDBObject("name","數學").append("_id", 1));

//刪除符合條件的文檔
course.remove(new BasicDBObject("score",15));

//刪除集合及所有文檔
course.drop();<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>

上面只是介紹了一些簡單的操作,具體復雜的查詢更新可以根據需求再去查找文檔資料。其實,不管操作簡單還是復雜,其核心都是對DBObject和DBCollection的操作,主要掌握DBObject如何構造鍵值對,以及一些條件表達式。

B. java怎麼做到使用mongodb來進行分組查詢統

java操作mongodb進行查詢,常用篩選條件的設置如下:
條件列表:
BasicDBList
condList
=
new
BasicDBList();
臨時條件對象:
BasicDBObject
cond
=
null;
DBCollection
coll
=
db.getCollection("A");
1、$where
在某種應用場合,若要集合A查詢文檔且要滿足文檔中某些屬性運算結果,可以編寫一腳本函數用where進行設置,比如:
某集合中存放的用戶信息,包括姓名、年齡、手機號、地址等,要篩選出年齡大於20且小於等於40的用戶,我們可以這樣:
String
ageStr
=
"function
(){return
parseFloat(this.age)
>
20
&&
parseFloat(this.age)
<=
40};";
cond
=
new
BasicDBObject();
cond.put("$where",ageStr);
放入條件列表
condList.add(cond);
2、$in
接1實例中,要查詢年齡為23、40、50的用戶信息,我們可以這樣:
創建一個臨時的條件列表對象,將條件值分別添加進去
BasicDBList
values
=
new
BasicDBList();
values.add(23);
values.add(40);
values.add(50);
cond
=
new
BasicDBObject();
cond.put("age",new
BasicDBObject("$in",values));
放入條件列表
condList.add(cond);
3、模糊匹配
接1實例中,要按照用戶的姓名進行模糊查詢,如:王,我們可以這樣做:
使用不區分大小寫的模糊查詢
3.1完全匹配

C. 如何用Java操作MongoDB

HelloWorld程序

學習任何程序的第一步,都是編寫HelloWorld程序,我們也不例外,看下如何通過Java編寫一個HelloWorld的程序。

首先,要通過Java操作Mongodb,必須先下載Mongodb的Java驅動程序,可以在這里下載。

新建立一個Java工程,將下載的驅動程序放在庫文件路徑下,程序代碼如下:

packagecom.mkyong.core;
importjava.net.UnknownHostException;
importcom.mongodb.BasicDBObject;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.DBCursor;
importcom.mongodb.Mongo;
importcom.mongodb.MongoException;
/**
*Java+MongoDBHelloworldExample
*
*/
publicclassApp{
publicstaticvoidmain(String[]args){
try{
//實例化Mongo對象,連接27017埠
Mongomongo=newMongo("localhost",27017);
//連接名為yourdb的資料庫,假如資料庫不存在的話,mongodb會自動建立
DBdb=mongo.getDB("yourdb");
//GetcollectionfromMongoDB,databasenamed"yourDB"
//從Mongodb中獲得名為yourColleection的數據集合,如果該數據集合不存在,Mongodb會為其新建立
DBCollectioncollection=db.getCollection("yourCollection");
//使用BasicDBObject對象創建一個mongodb的document,並給予賦值。
BasicDBObjectdocument=newBasicDBObject();
document.put("id",1001);
document.put("msg","helloworldmongoDBinJava");
//將新建立的document保存到collection中去
collection.insert(document);
//創建要查詢的document
BasicDBObjectsearchQuery=newBasicDBObject();
searchQuery.put("id",1001);
//使用collection的find方法查找document
DBCursorcursor=collection.find(searchQuery);
//循環輸出結果
while(cursor.hasNext()){
System.out.println(cursor.next());
}
System.out.println("Done");
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(MongoExceptione){
e.printStackTrace();
}
}
}

最後,輸出的結果為:

{"_id":{"$oid":"4dbe5596dceace565d229dc3"},
"id":1001,"msg":"helloworldmongoDBinJava"}


Done


在上面的例子中,演示了使用Java對Mongodb操作的重要方法和步驟,首先通過創建Mongodb對象,傳入構造函數的參數是Mongodb的資料庫所在地址和埠,然後使用

getDB方法獲得要連接的資料庫名,使用getCollection獲得數據集合的名,然後通過新建立BasicDBObject對象去建立document,最後通過collection的insert方法,將建立的document保存到資料庫中去。而collection的find方法,則是用來在資料庫中查找document。

從Mongodb中獲得collection數據集

在Mongodb中,可以通過如下方法獲得資料庫中的collection:

DBCollectioncollection=db.getCollection("yourCollection");

如果你不知道collection的名稱,可以使用db.getCollectionNames()獲得集合,然後再遍歷,如下:

DBdb=mongo.getDB("yourdb");
Setcollections=db.getCollectionNames();
for(StringcollectionName:collections){
System.out.println(collectionName);
}

完成的一個例子如下:

packagecom.mkyong.core;
importjava.net.UnknownHostException;
importjava.util.Set;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.Mongo;
importcom.mongodb.MongoException;
/**
*Java:GetcollectionfromMongoDB
*
*/
publicclassGetCollectionApp{
publicstaticvoidmain(String[]args){
try{
Mongomongo=newMongo("localhost",27017);
DBdb=mongo.getDB("yourdb");
Set<String>collections=db.getCollectionNames();
for(StringcollectionName:collections){
System.out.println(collectionName);
}
DBCollectioncollection=db.getCollection("yourCollection");
System.out.println(collection.toString());
System.out.println("Done");
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(MongoExceptione){
e.printStackTrace();
}
}
}

Mongodb中如何插入數據

下面,講解下如何使用4種方式,將JSON數據插入到Mongodb中去。首先我們准備JSON

格式的數據,如下:

{
"database":"mkyongDB",
"table":"hosting",
"detail":
{
records:99,
index:"vps_index1",
active:"true"
}
}
}


我們希望用不同的方式,通過JAVA代碼向Mongodb插入以上格式的JSON數據

第一種方法,是使用BasicDBObject,方法如下代碼所示:

BasicDBObjectdocument=newBasicDBObject();
document.put("database","mkyongDB");
document.put("table","hosting");
BasicDBObjectdocumentDetail=newBasicDBObject();
documentDetail.put("records","99");
documentDetail.put("index","vps_index1");
documentDetail.put("active","true");
document.put("detail",documentDetail);
collection.insert(document);

第二種方法是使用BasicDBObjectBuilder對象,如下代碼所示:

=BasicDBObjectBuilder.start()
.add("database","mkyongDB")
.add("table","hosting");
Detail=BasicDBObjectBuilder.start()
.add("records","99")
.add("index","vps_index1")
.add("active","true");
documentBuilder.add("detail",documentBuilderDetail.get());
collection.insert(documentBuilder.get());

第三種方法是使用Map對象,代碼如下:

MapdocumentMap=newHashMap();
documentMap.put("database","mkyongDB");
documentMap.put("table","hosting");
MapdocumentMapDetail=newHashMap();
documentMapDetail.put("records","99");
documentMapDetail.put("index","vps_index1");
documentMapDetail.put("active","true");
documentMap.put("detail",documentMapDetail);
collection.insert(newBasicDBObject(documentMap));

第四種方法,也就是最簡單的,即直接插入JSON格式數據

String json="{'database' : 'mkyongDB','table' : 'hosting',"+
"'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
DBObject dbObject=(DBObject)JSON.parse(json);
collection.insert(dbObject);

這里使用了JSON的parse方法,將解析後的JSON字元串轉變為DBObject對象後再直接插入到collection中去。


完整的代碼如下所示:

packagecom.mkyong.core;
importjava.net.UnknownHostException;
importjava.util.HashMap;
importjava.util.Map;
importcom.mongodb.BasicDBObject;
importcom.mongodb.BasicDBObjectBuilder;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.DBCursor;
importcom.mongodb.DBObject;
importcom.mongodb.Mongo;
importcom.mongodb.MongoException;
importcom.mongodb.util.JSON;
/**
* Java MongoDB : Insert a Document
*
*/
publicclass InsertDocumentApp {
publicstaticvoid main(String[] args){
try{
Mongo mongo=newMongo("localhost",27017);
DB db=mongo.getDB("yourdb");
//get a single collection
DBCollection collection=db.getCollection("mmyColl");
//BasicDBObject example
System.out.println("BasicDBObject example...");
BasicDBObject document=newBasicDBObject();
document.put("database","mkyongDB");
document.put("table","hosting");
BasicDBObject documentDetail=newBasicDBObject();
documentDetail.put("records","99");
documentDetail.put("index","vps_index1");
documentDetail.put("active","true");
document.put("detail", documentDetail);
collection.insert(document);
DBCursor cursorDoc=collection.find();
while(cursorDoc.hasNext()){
System.out.println(cursorDoc.next());
}
collection.remove(newBasicDBObject());
//BasicDBObjectBuilder example
System.out.println("BasicDBObjectBuilder example...");
BasicDBObjectBuilder documentBuilder=BasicDBObjectBuilder.start()
.add("database","mkyongDB")
.add("table","hosting");
BasicDBObjectBuilder documentBuilderDetail=BasicDBObjectBuilder.start()
.add("records","99")
.add("index","vps_index1")
.add("active","true");
documentBuilder.add("detail", documentBuilderDetail.get());
collection.insert(documentBuilder.get());
DBCursor cursorDocBuilder=collection.find();
while(cursorDocBuilder.hasNext()){
System.out.println(cursorDocBuilder.next());
}
collection.remove(newBasicDBObject());
//Map example
System.out.println("Map example...");
Map documentMap=newHashMap();
documentMap.put("database","mkyongDB");
documentMap.put("table","hosting");
Map documentMapDetail=newHashMap();
documentMapDetail.put("records","99");
documentMapDetail.put("index","vps_index1");
documentMapDetail.put("active","true");
documentMap.put("detail", documentMapDetail);
collection.insert(newBasicDBObject(documentMap));
DBCursor cursorDocMap=collection.find();
while(cursorDocMap.hasNext()){
System.out.println(cursorDocMap.next());
}
collection.remove(newBasicDBObject());
//JSON parse example
System.out.println("JSON parse example...");
String json="{'database' : 'mkyongDB','table' : 'hosting',"+
"'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
DBObject dbObject=(DBObject)JSON.parse(json);
collection.insert(dbObject);
DBCursor cursorDocJSON=collection.find();
while(cursorDocJSON.hasNext()){
System.out.println(cursorDocJSON.next());
}
collection.remove(newBasicDBObject());
}catch(UnknownHostException e){
e.printStackTrace();
}catch(MongoException e){
e.printStackTrace();
}
}
}


D. mongoDB在java中怎麼根據內嵌文檔條件查詢

建立SimpleTest.java,完成簡單的mongoDB資料庫操作 Mongo mongo = new Mongo(); 這樣就創建了一個MongoDB的資料庫連接對象,它默認連接到當前機器的localhost地址,埠是27017。 DB db = mongo.getDB(「test」); 這樣就獲得了一個test的資料庫,如果mongoDB中沒有創建這個資料庫也是可以正常運行的。如果你讀過上一篇文章就知道,mongoDB可以在沒有創建這個資料庫的情況下,完成數據的添加操作。當添加的時候,沒有這個庫,mongoDB會自動創建當前資料庫。 得到了db,下一步我們要獲取一個「聚集集合DBCollection」,通過db對象的getCollection方法來完成。 DBCollection users = db.getCollection("users"); 這樣就獲得了一個DBCollection,它相當於我們資料庫的「表」。 查詢所有數據 DBCursor cur = users.find(); while (cur.hasNext()) { System.out.println(cur.next()); } 完整源碼 package com.hoo.test; import java.net.UnknownHostException; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.Mongo; import com.mongodb.MongoException; impor... 建立SimpleTest.java,完成簡單的mongoDB資料庫操作

Mongo mongo = new Mongo();

這樣就創建了一個MongoDB的資料庫連接對象,它默認連接到當前機器的localhost地址,埠是27017。

DB db = mongo.getDB(「test」);

這樣就獲得了一個test的資料庫,如果mongoDB中沒有創建這個資料庫也是可以正常運行的。如果你讀過上一篇文章就知道,mongoDB可以在沒有創建這個資料庫的情況下,完成數據的添加操作。當添加的時候,沒有這個庫,mongoDB會自動創建當前資料庫。

得到了db,下一步我們要獲取一個「聚集集合DBCollection」,通過db對象的getCollection方法來完成。

DBCollection users = db.getCollection("users");

這樣就獲得了一個DBCollection,它相當於我們資料庫的「表」。

查詢所有數據

DBCursor cur = users.find();

while (cur.hasNext()) {

System.out.println(cur.next());

}

完整源碼
package com.hoo.test;

import java.net.UnknownHostException;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.util.JSON;

/**
* <b>function:</b>MongoDB 簡單示例
* @author hoojo
* @createDate 2011-5-24 下午02:42:29
* @file SimpleTest.java
* @package com.hoo.test
* @project MongoDB
* @blog http
* @email [email protected]
* @version 1.0
*/
public class SimpleTest {

public static void main(String[] args) throws UnknownHostException, MongoException {
Mongo mg = new Mongo();
//查詢所有的Database
for (String name : mg.getDatabaseNames()) {
System.out.println("dbName: " + name);
}

DB db = mg.getDB("test");
//查詢所有的聚集集合
for (String name : db.getCollectionNames()) {
System.out.println("collectionName: " + name);
}

DBCollection users = db.getCollection("users");

//查詢所有的數據
DBCursor cur = users.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
System.out.println(cur.count());
System.out.println(cur.getCursorId());
System.out.println(JSON.serialize(cur));
}

E. java面試中redis,mongodb類的,會問哪些問題,怎麼回答

1、可能會問nosql和關系型資料庫的區別:
優點:

1)成本:nosql資料庫簡單易部署,基本都是開源軟體,不需要像使用Oracle那樣花費大量成本購買使用,相比關系型資料庫價格便宜
2)查詢速度:nosql資料庫將數據存儲於緩存之中,關系型資料庫將數據存儲在硬碟中,自然查詢速度遠不及nosql資料庫
3)存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象或者是集合等各種格式,而資料庫則只支持基礎類型
4)擴展性:關系型資料庫有類似join這樣的多表查詢機制的限制導致擴展很艱難
缺點:
1)維護的工具和資料有限,因為nosql是屬於新的技術,不能和關系型資料庫10幾年的技術同日而語。
2)不提供對sql的支持,如果不支持sql這樣的工業標准,將產生一定用戶的學習和使用成本
3)不提供關系型資料庫對事物的處理
2、介紹下redis和mongodb:
自行google。
3、應用場景:
redis:
a.主要是做熱點數據緩存。
b.數據過期處理。
c.消息隊列等功能。

d.計數,例如投票等。
mongodb:
mongodb的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋梁,集兩者的優勢於一身。mongo適用於以下場景:
a.網站數據:mongo非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。
b.緩存:由於性能很高,mongo也適合作為信息基礎設施的緩存層。在系統重啟之後,由mongo搭建的持久化緩存可以避免下層的數據源過載。
c.大尺寸、低價值的數據:使用傳統的關系資料庫存儲一些數據時可能會比較貴,在此之前,很多程序員往往會選擇傳統的文件進行存儲。
d.高伸縮性的場景:mongo非常適合由數十或者數百台伺服器組成的資料庫。
e.用於對象及JSON數據的存儲:mongo的BSON數據格式非常適合文檔格式化的存儲及查詢。
4、支持的數據類型:
內容比較多,自行將網上的信息整理一下。

閱讀全文

與mongodbjava類相關的資料

熱點內容
如何驗證web伺服器是否正常工作 瀏覽:132
全球最大的加密貨幣網站 瀏覽:284
解壓文件為什麼有問號 瀏覽:389
php考試系統模板 瀏覽:431
pdf導出圖片模糊 瀏覽:610
我的世界編玩邊學伺服器地址 瀏覽:456
基於單片機的火災報警系統 瀏覽:166
上海追星用什麼app 瀏覽:425
海馬m5壓縮機維修 瀏覽:98
抖音怎麼給自己喜歡的加密 瀏覽:247
中國五大加密貨幣 瀏覽:263
程序員手疼7年查6處骨腫瘤 瀏覽:39
python列表對象的創建與刪除 瀏覽:467
python刪除excel表格中的一行 瀏覽:521
android資料庫的增刪改查 瀏覽:632
雲伺服器2g4g有什麼區別 瀏覽:324
顯示文件夾所有文件的文件名函數 瀏覽:213
可以在網站寫代碼的編譯器 瀏覽:76
王者換伺服器怎麼不用重玩 瀏覽:328
武漢編譯ipfs雲存儲器 瀏覽:52