mongodb學習之:文檔操作

來源:互聯網
上載者:User

標籤:htm   order   mongodb   存在   查詢   一個   coding   deb   mysq   

在上一章中有講到文檔的插入操作是用insert的方法。如果該集合不在該資料庫中,mongodb會自動建立該集合并插入文檔

用find的方法可以尋找所有的集合資料

> db.maple.find()

{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhf" 

也可以將資料定義為一個變數:

document=({“name”:”zhf”})

db.maple.insert(document)

 

文檔更新:

MongoDB 使用 update() 和 save() 方法來更新集合中的文檔

參數說明:

query : update的查詢條件,類似sql update查詢內where後面的。

update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的

upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。

multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

writeConcern :可選,拋出異常的層級。

 

db.maple.update({"name":"zhf"},{"$set":{"name":"zhanghongfeng"}})

還可以採用運算子的方式來進行判斷

> db.maple.update({"age":{"$eq":35}},{"$set":{"city":"chengdu"}})

#找到年齡等於35的文檔並將城市設定為chengdu

> db.maple.update({"city":"chengdu"},{"$inc":{"age":1}})

#找到城市為chengdu的文檔並將age加1

> db.maple.update({"city":"chengdu"},{"$inc":{"age":-1}})

#找到城市為chengdu的文檔並將age減1

#unset:刪除某個欄位

> db.maple.update({"age":35},{$unset:{"programming":1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.maple.find()

{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing" }

{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

 

$push操作:把value追加到field裡面去,field一定要是數群組類型才行,如果field不存在,會新增一個數群組類型加進去

> db.maple.update({"age":35},{$push:{"programming":"javascript"}})

> db.maple.find()

{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript" ] }

{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

#當數組不存在的時候會新增一個數組

> db.maple.update({"age":35},{$push:{"programming":"mysql"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.maple.find()

{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql" ] }

{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

#已存在的情況下則會繼續往數組裡面添加資料

> db.maple.update({"age":35},{$pushAll:{"programming":["object-c","HTML"]}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.maple.find()

{ "_id" : ObjectId("5a35d6278ef76f6d57aae92c"), "name" : "zhanghongfeng_maple" }

{ "_id" : ObjectId("5a35d7ce8ef76f6d57aae92d"), "age" : 35, "city" : "chongqing", "programming" : [ "javascript", "mysql", [ "mongodb", "linux" ], "object-c", "HTML" ] }

{ "_id" : ObjectId("5a35d8548ef76f6d57aae92e"), "favorite" : "basketball" }

{ "_id" : ObjectId("5a3611de366b42e0050debd8"), "coding" : [ "C", "python", "Go", "Java" ] }

#添加多個資料到數組中採用pushAll的方式

#addToSet

只有在數組中不存在的時候才添加:

> db.maple.update({"age":35},{$addToSet:{"programming":"mysql"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

#pop

刪除第一個和最後一個元素

> db.maple.update({"age":35},{$pop:{"programming":1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.maple.update({"age":35},{$pop:{"programming":-1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

#pull:刪除特定的元素

> db.maple.update({"age":35},{$pull:{"programming":"object-c"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

文檔尋找:

我們用關聯式資料庫中的對比來看下:

db.maple.find() 相當於select * from maple
db.maple.find({"age":27}) 相當於select * from maple where age=‘27‘
db.maple.find({"age":27,"name":"xing"}) 相當於select * from maple where age=‘27‘ and name="xing"
db.maple.find({},{"name":1}) select name from maple,如果name:0則是不顯示name欄位
db.maple.find().limit(1) 相當於select * from maple limit 1

db.maple.find().sort({_id:-1}).limit(1)相當於select * from maple order by _id desc limit 1

 

db.maple.find({"age":{"$in",[12,34,100]}})  相當於select * from maple where age in (12,3,100)
db.maple.find({"age ":{"$nin",[12,3,100]}})  相當於select * from maple where _id not in (12,3,100)
db.maple.find({"$or":[{"age":16},{"name":"xing"}]}) 相當於select * from blog where age = 16 or name = ‘xing‘
db.maple.find({"id_num":{"$mod":[5,1]}}) 取的是id_num mod 5 = 1 的欄位,如id_num=1,6,11,16
db.maple.find({"id_num":{"$not":{"$mod":[5,1]}}}) 取的是id_num mod 5 != 1 的欄位,如除了id_num=1,6,11,16等所有欄位,多於正則一起用

 

$exists判斷欄位是否存在

db.blog.find({ “name” : { $exists : true }}); // 如果存在元素name,就返回
db.blog.find({ “name” : { $exists : false }}); // 如果不存在元素name,就返回

#查詢數組:

db.blog.find({"coding":{"$size":4}})  coding數組長度為3的符合結果

db.blog.find({"coding":{"$all":["C", "python", "Go", "Java" ]}})   fruit中必需有數組中的每一個才符合結果

mongodb學習之:文檔操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.