mondodb常用shell命令和常用java驅動操作

來源:互聯網
上載者:User

MongoDB預設將資料存放區在 /data/db 目錄下

ubuntu預設安裝在/usr/lib/mongodb下面

啟動服務

啟動MongoDB伺服器:

$sudo  ./mongodb-路徑/bin/mongod

啟動shell,它預設串連到localhost:

$ sudo ./mongodb-路徑/bin/mongo >命令文法

停止服務

#!/bin/bashpid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;if [ "${pid}" != "" ]; then kill -2 ${pid};fi

shell:

show dbs  //所有的資料庫

show collections  //當前資料庫的所有集合
show users  //所有使用者
user <db name>  //切換資料庫
db.help()  //資料庫所有可操作命令
db.testcollection.help()  //集合所有可操作命令
db.testcollection.find()  //當前資料庫下的testcollection集合下的所有資料
db.testcollection.find({name:'larry'}) //尋找
db.testcollection.insert({name:'larry'})  //插入

db.testcollection.remove({name:'larry'})  //刪除

java api:

Mongo:連線物件
DB:資料庫
DBCollection:集合(類比關聯式資料庫中的表),可用於增刪改查對象
BasicDBObject:實現了DBObject,一條記錄。
DBCursor:遊標,用來遍曆查詢取得的資料,實現了Iterable和Iterator

getLastError()

mongodb預設不等待響應訊息。使用getLastError命令可以確保操作已經正確執行

寫操作預設不會有返結果:這樣就節約了用戶端在寫操作時等待用戶端/伺服器之間往返時間。

調用getLastError會阻塞串連一直到返回結果

java驅動使用WriteConcern配置返回結果的時機

傳回值

這個命令的傳回值是一個多欄位的對象。常用的欄位已經列在下面;這裡可能還有其他欄位。

  • ok - 為真的話表示getLastError命令成功完成了。它並不表示上一次沒有錯誤。
  • err - 如果非空,表示有錯誤出現。值是一個錯誤本文的描述。
  • code - 如果設定了,表示出現的錯誤碼。
  • connectionId - 串連的id。
  • lastOp - 上一次操作的op-id

對於更新:

  • n - 如果一次更新完成了,它是更新的文檔個數。

使用了w

  • wnote - 如果設定了,表示這裡有些不尋常的事情發生,涉及使用w:
  • wtimeout - 如果逾時了,設定該值為真
  • waited - 如果逾時了,標記等到了多久,單位毫秒
  • wtime - 花在等待操作完成的時間

串連資料庫

Mongo m = new Mongo("localhost");//預設使用27017連接埠
DB db = m.getDB("qa");//獲得名為qa的資料庫,沒有則建立
DBCollection question = db.getCollection("question");  //獲得名為students的集合,沒有則自動建立

m.getDatabaseNames();//查看所有資料庫

db.getCollectionNames();//當前資料庫下所有集合

m.dropDatabase("qa");//刪除一個資料庫

插入資料

BasicDBObject dbo = new BasicDBObject(); 

dbo.put("name", "larry"); 

question.insert(dbo); 

question.save(dbo); 

insert如果主鍵_id存在不做任何操作
save如果主鍵_id存在更新

  查詢資料

//查詢所有對象        DBCursor cur = question.find();        while(cur.hasNext()){            System.out.println(cur.next());        }                //第一個對象        question.findOne();                //查詢記錄數量        question.find().count();                //查詢部分資料區塊        cur = question.find().skip(0).limit(1);        while(cur.hasNext()){            System.out.println(cur.next());        }        //比較查詢        //"$gt": 大於        //"$gte":大於等於        //"$lt": 小於        //"$lte":小於等於        //"$in": 包含        cond = new BasicDBObject();        cond.put("age", new BasicDBObject("$gt",19));        cond.put("age",new BasicDBObject("$gt",19).append("$lt", 30));        cond.put("age",new BasicDBObject("$in",arr));        Pattern p = Pattern.compile("Ja?k");        cond.put("name", p);        cur = question.find(cond);        while(cur.hasNext()){            System.out.println(cur.next());        }        

更新:

//如果資料不存在,是否添加

//匹配到多條是否修改

WriteConcern.NONE:沒有異常拋出WriteConcern.NORMAL:僅拋出網路錯誤異常,沒有伺服器錯誤異常

WriteConcern.SAFE:拋出網路錯誤異常、伺服器錯誤異常;並等待伺服器完成寫操作。

WriteConcern.MAJORITY: 拋出網路錯誤異常、伺服器錯誤異常;並等待一個主伺服器完成寫操作。

WriteConcern.FSYNC_SAFE: 拋出網路錯誤異常、伺服器錯誤異常;寫操作等待伺服器將資料重新整理到磁碟。

WriteConcern.JOURNAL_SAFE:拋出網路錯誤異常、伺服器錯誤異常;寫操作等待伺服器提交到磁碟的記錄檔。

WriteConcern.REPLICAS_SAFE:拋出網路錯誤異常、伺服器錯誤異常;等待至少2台伺服器完成寫操作


WriteResult ret = question.update(new BasicDBObject("name","larry"), new BasicDBObject("$set", new BasicDBObject("age",21,WriteConcern.NORMAL)),true,true,WriteConcern.SAFE);

ret.getN()      //操作影響的記錄條數

ret.getLastError()//操作發生的異常

由於mongodb中使用串連池的原因,getLastError()需要再次從串連池中擷取串連,這樣效率會慢一些

WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}}, WriteConcern.SAFE);if(ret.getLastError() == null)    return true;else    return false;<==>db.requestStart();//保證使用同一個串連,串連中間不會被放回串連池WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});if(ret.getLastError() == null)    return true;else    return false;db.requestDone();

刪除:

question.remove(cond);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.