MongoDB基础命令
MongoDB 入門命令
查看當前數據庫
> show dbs admin 0.000GB config 0.000GB local 0.000GB >-- use databaseName 選庫 > use test switched to db test >-- show tables/collections 查看當前庫下的collection > show tables > show collections >?基礎操作
Mongodb的庫是隱式創建,你可以use 一個不存在的庫然后在該庫下創建collection,即可創建庫
--創建collection --db.createCollection(‘collectionName’) > db.createCollection('test') { "ok" : 1 } > > show tables test >--collection允許隱式創建 --Db.collectionName.insert(document); > db.stu.insert({stu:'001',name:'xiaoming'}) WriteResult({ "nInserted" : 1 }) > show tables stu test-- 刪除collection db.collectionName.drop()-- 刪除database db.dropDatabase(); > db.dropDatabase() { "dropped" : "test", "ok" : 1 } >?增
插入數據
> db.stu.insert({sid:"10"}) WriteResult({ "nInserted" : 1 }) > db.stu.insert({sid:"11"}) WriteResult({ "nInserted" : 1 })?
> db.stu.find() { "_id" : ObjectId("5c0c8a0b31a9b3cbb9df1d4f"), "sid" : "10" } { "_id" : ObjectId("5c0c8ac731a9b3cbb9df1d50"), "sid" : "11" }?
添加數據時不添加任何主鍵,會制動生成一個主鍵,主鍵不會像關系型數據庫那樣自動遞增(為了分布式考慮),使用的是時間戳+機器編號+進程編號+序列號來生成,保證每個id都是唯一的.id為5c0c8a0b31a9b3cbb9df1d4f,可以分解為
5c0c8a0b 31a9b3 cbb9 df1d4f (5c0c8a0b)表示時間戳, 31a9b3 表示機器號, cbb9 表示進程編號, df1d4f 表示序列號
我們也可以手動指定ID
> db.stu.insert({_id:"001","sid":"12"}) WriteResult({ "nInserted" : 1 }) > db.stu.find() { "_id" : ObjectId("5c0c8a0b31a9b3cbb9df1d4f"), "sid" : "10" } { "_id" : ObjectId("5c0c8ac731a9b3cbb9df1d50"), "sid" : "11" } { "_id" : "001", "sid" : "12" } >?批量插入
> db.user.insert([ ... {username:"xiaoming",nickname:"XM",passwd:"123"} , ... {username:"xiaogang",nickname:"XG",passwd:"111"}, ... {username:"xiaohua",nickname:"XH",passwd:"123"} ... ]) BulkWriteResult({"writeErrors" : [ ],"writeConcernErrors" : [ ],"nInserted" : 3,"nUpserted" : 0,"nMatched" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ] }) # 查看數據 > db.user.find().pretty() {"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d51"),"username" : "xiaoming","nickname" : "XM","passwd" : "123" } {"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d52"),"username" : "xiaogang","nickname" : "XG","passwd" : "111" } {"_id" : ObjectId("5c0c8f3531a9b3cbb9df1d53"),"username" : "xiaohua","nickname" : "XH","passwd" : "123" }?
執行插入數據的時候,驅動程序會把數據轉換成為BSON格式,然后將數據輸入數據庫,數據庫會解析BSON,并檢驗是否含有“_id”鍵,因為用戶如果沒有自定義”_id”,會自動生成,而且每次插入的文檔不能超過16M(插入文檔的大小跟MongoDB版本有關系)
刪除文檔
方式一
db.user.deleteMany({})
> db.user.deleteMany({}) { "acknowledged" : true, "deletedCount" : 3 } > > db.user.remove({}) WriteResult({ "nRemoved" : 3 })?上述命令會刪除user所有的文檔,不刪除集合本身,原有的索引也會保留,remove函數可以接收一個查詢文檔作為可選參數給定參數后,可以刪除指定符條件的文檔。
方式二
> db.user.remove({passwd:"123"}) WriteResult({ "nRemoved" : 2 }) > db.user.find().pretty() {"_id" : ObjectId("5c0c91d131a9b3cbb9df1d5b"),"username" : "xiaogang","nickname" : "XG","passwd" : "111" }?
刪除數據是永久性的不可以撤銷也不能恢復。
更新文檔
在MongoDB中更新單個文檔的操作是原子性的,默認情況下如果一個update操作多個文doc,那么對于每個doc的更新是原子性的,但是對于整個update操作而言,不是原子性的可能存在前面的doc更新成功,而后面的文檔更新失敗,由于更新單個文檔doc的操作是原子性的,如果兩個更新同時發生,那么一個更新操作會足協另外一個,doc的最終結果的值是由事件靠后的更新操作刪除決定的.
格式
db.collection.update(critera,objNew,upset,multi)
critera:查詢條件
objNew:update對象和一些更新操作符
upset:如果存在update記錄,是否插入objNew這個新文檔,true為插入,默認為false
multi:默認是false,值更新找到的第一條記錄,如果是true,按照條件查詢出看來的記錄全部更新
save
另一個更新命令是save 格式如下
db.collection.save(object)
obj表示要更新的對象,如果內部已經存在一個和obj相同的”_id”的記錄紙Mongodb會把obj對象替換集合內已存在的記錄,如果不存在,則會插入obj對象.
文檔替換
用于一個新文檔完全替代匹配的文檔,這種方法先把數據讀出來,之后對對象的方式完成修改,這種方式一般用在修改較大的情況下:
db.user.insertOne({ name:"foo",nickname:"bar",friends:12,enemies:2 })?我們希望把數據修改成為
db.user.insertOne({ name:"foo",nickname:"bar",relations:{friends:12,enemies:2} })?
步驟
查詢對象存儲到u中:
var u = db.user.findOne({name:"foo"})?設置relations的值:
u.relations = {friends:u.friends,enemies:u.enemies}?修改username的值:
> u.username = u.name foo?刪除friends:
> u.username = u.name foo?刪除enmies:
> delete u.enemies true?刪除name:
delete u.name?替換對象
> db.user.update({name:"foo"},u) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })?查詢
> db.user.find().pretty() {"_id" : ObjectId("5c0cab14d22a51c6ef9cdcee"),"nickname" : "bar","relations" : {"friends" : undefined,"enemies" : undefined},"username" : "foo" }?
這種替換基于編程思想來進行的這種方式對單個對象傅咋修改比較適用
使用修改器
修改文檔只修改文章的部分,而不是全部,這個時候我們可以使用修改器對文檔進行更新,他的主要思想是通過$符號來進行修改這些操作
增加和減少
inc可以對數據進行增加和減少,這個操作只針對數字類型,小數或者整數.
添加一條數據:
> db.topic.insertOne({title:"first",version:108}) {"acknowledged" : true,"insertedId" : ObjectId("5c0cb1ba422725fda4bd5746") } > db.topic.find().pretty() {"_id" : ObjectId("5c0cb1ba422725fda4bd5746"),"title" : "first","version" : 108 }?將數字減少3
> db.topic.update({"title" : "first"},{$inc:{version:-3}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.topic.find().pretty() {"_id" : ObjectId("5c0cb1ba422725fda4bd5746"),"title" : "first","version" : 105 }?
$set修改器
使用 set 可以完成的頂的需求修改
原始數據 > db.author.find().pretty() {"_id" : ObjectId("5c0cb444422725fda4bd5747"),"name" : "foo","age" : 20,"gender" : "male","intro" : "student" }?將intro 修改為 teacher
> db.author.update({name:"foo"},{$set:{intro:"teacher"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.author.find().pretty() {"_id" : ObjectId("5c0cb444422725fda4bd5747"),"name" : "foo","age" : 20,"gender" : "male","intro" : "teacher" } >?
$push修改器
使用push可以完成數組的插入,會在最后一條插入,如果沒有這個key會自動創建一長條插入
> db.post.find().pretty() {"_id" : ObjectId("5c0cc527422725fda4bd5748"),"title" : "a blog","content" : "...","author" : "foo" } #s使用push插入數組db.post.update({title:"a blog"},{$push:{comments:{name:"lina",email:"lina@email.com",content:"lina replay"}}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.post.find().pretty() {"_id" : ObjectId("5c0cc527422725fda4bd5748"),"title" : "a blog","content" : "...","author" : "foo","comments" : [{"name" : "lina","email" : "lina@email.com","content" : "lina replay"}] }?
addToSet修改器
使用addToSet可以向一個數組添加元素,有一個限定條件,如果存在了就不添加.
{"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),"name" : "foo","age" : 12,"email" : ["foo@example.com","foo@163.com"] } ## 添加集合 > db.user.update({name:"foo"},{$addToSet:{email:"foo@qq.com"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 查詢結果 > db.user.find().pretty() {"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),"name" : "foo","age" : 12,"email" : ["foo@example.com","foo@163.com","foo@qq.com"] } > ## 插入一個存在的數據 > db.user.update({name:"foo"},{$addToSet:{email:"foo@qq.com"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) > db.user.find().pretty() {"_id" : ObjectId("5c0cc9f3cdb93a655448eec5"),"name" : "foo","age" : 12,"email" : ["foo@example.com","foo@163.com","foo@qq.com"] }?nModified鍵的值為 0 ,因為已經添加了,所以執行添加語句的時候不會重復添加的,這種機制減少了數據庫的冗余數據.
更新多個文檔
> db.clllections.update({x:1},{x:99}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.clllections.find().pretty() { "_id" : ObjectId("5c0ccc58cdb93a655448eec6"), "x" : 99 } { "_id" : ObjectId("5c0ccc61cdb93a655448eec7"), "x" : 1 } { "_id" : ObjectId("5c0ccc65cdb93a655448eec8"), "x" : 1 } { "_id" : ObjectId("5c0ccc6acdb93a655448eec9"), "x" : 2 } > 只有第一條匹配了 采用如下命令 > db.clllections.update({x:1},{$set:{x:99}},false,true) WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) > db.clllections.find().pretty() { "_id" : ObjectId("5c0ccc58cdb93a655448eec6"), "x" : 99 } { "_id" : ObjectId("5c0ccc61cdb93a655448eec7"), "x" : 99 } { "_id" : ObjectId("5c0ccc65cdb93a655448eec8"), "x" : 99 } { "_id" : ObjectId("5c0ccc6acdb93a655448eec9"), "x" : 2 }首先我們要將修改的數據賦值給$set,$set是一個修改器,我們將在上文詳細講解過,然后后面多了兩個參數,第一個flase表示如果不存在update記錄,是否將我們要更新的新文檔插入,true 表示插入 false 表示不插入,第二個true表示是否更新全部屬性的文章,false表示值更新第一條記錄,true表示更新所有查到的文檔.
?
轉載于:https://www.cnblogs.com/fmgao-technology/p/10410775.html
總結
以上是生活随笔為你收集整理的MongoDB基础命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hashCode()方法(覆盖hashC
- 下一篇: Springboot集成Shiro+Re