1、 //找到age=15的結果,並將結果的age替換成16
db.Person.update({'age':15},{$set:{'age':16}},{multi:true});
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數爲true,就把按條件查出來多條記錄全部更新。
2、在3.2版本開始,MongoDB提供以下更新集合文檔的方法:
更新單個文檔
db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})
更新多個文檔
db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
加入文檔中並沒有status屬性,那麼就會給age>10的數據全部添加屬性"status":"xyz";
3、MongoDB 與 RDBMS Where 語句比較
- db.collection.updateOne() 向指定集合更新單個文檔
- db.collection.updateMany() 向指定集合更新多個文檔
操作 | 格式 | 範例 | RDBMS中的類似語句 |
---|---|---|---|
等於 | {<key>:<value> } |
db.col.find({"by":"菜鳥教程"}).pretty() |
where by = '菜鳥教程' |
小於 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小於或等於 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大於 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大於或等於 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等於 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
pretty() 方法以格式化的方式來顯示所有文檔。
MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件。
語法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()
以上實例中類似於 WHERE 語句:WHERE by='Tom' AND age=20
MongoDB OR 條件
MongoDB OR 條件語句使用了關鍵字 $or,語法格式如下:
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
db.person.find({$or:[{'age':14},{'name':"Tom"}]}).sort({'name':1})
解析:$or的作用是查詢age=14或者name='Tom'數據,sort 按name進行升序排列;
AND 和 OR 聯合使用
以下實例演示了 AND 和 OR 聯合使用,類似常規 SQL 語句爲: 'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
4、projection 參數的使用方法
-
db.collection.find(query, projection)
若不指定 projection,則默認返回所有鍵,指定 projection 格式如下,有兩種模式
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的鍵,不返回其他鍵 db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的鍵,返回其他鍵
_id 鍵默認返回,需要主動指定 _id:0 纔會隱藏
兩種模式不可混用(因爲這樣的話無法推斷其他鍵是否應返回)
db.collection.find(query, {title: 1, by: 0}) // 錯誤
只能全1或全0,除了在inclusion模式時可以指定_id爲0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正確
若不想指定查詢條件參數 query 可以 用 {} 代替,但是需要指定 projection 參數:
querydb.collection.find({}, {title: 1})
5、save操作和insert操作區別在於當遇到_id相同的情況下,save會對那條數據進行跟新操作,insert則會報錯。
6、update操作
就是將先前的記錄刪除掉, 再添加一條新的(也可以說成是整體更新)
7、upsert操作:
顧名思義,這是兩個單詞的縮寫:update和insert,這個操作的目的是如果有這個數據,就進行更新操作,如果沒有這個數據就進行插入操作。但是要注意,其實並沒有upsert這個方法,upsert只是一種說法,它的實現還是靠update方法來做的。 將update方法的第三個參數改成true即可做到upsert。
如下:db.persons.update({"_id":"003"},{"name":"wangwu"},true)