MongoDB隨筆

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章