MongoDB 增刪改查 學習筆記

簡單命令shell

  mongo --nodb 不指定連接數據庫
  conn = new Mongo(" some-host: 30000")
  db = conn.getDB(" myDB") 連接數據庫
  db.help() 查看幫助
  db.foo.update 查看update使用方法
  function (query, obj, upsert, multi) {
    assert( query, "need a query");
    assert( obj, "need an object");
    this._validateObject( obj);
    this._mongo.update( this._fullName, query, obj,upsert ? true : false, multi ? true : false);
  }數據庫

  shell 輔 助 函 數 對 應 的 JavaScript 函 數
  輔 助 函 數      等 價 函 數
  use foo       db.getSisterDB(" foo")
  show dbs      db.getMongo(). getDBs()
  show collections      db.getCollectionNames()


插入
  db.foo.insert({" bar" : "baz"})
批量插入
  db.foo.batchInsert([{"_id" : 0}, {"_id" : 1}, {"_id" : 2}])
刪除數據
  db.foo.remove({'opt-out':true})
刪除整個集合
  db.tester.drop()數組

 

更新
  joe = { "_id" : ObjectId(" 4b2b9f67a1f631733d917a7a"), "name" : "joe", "friends" : 32, "enemies" : 2 } 元數據
  db.users.update({" name" : "joe"}, joe);函數

  修改器
    $set 用來指定一個字段的值。若是這個字段不存在,則建立它。這對更新模式或者增長用戶定義的鍵來講很是方便。
    db.users.update(
      {"_id" : ObjectId(" 4b253b067525f35f94b60a31")},
      {" $set" : {" favorite book" : "War and Peace"}}
    )
  修改內嵌文檔
    db.blog.posts.update({" author.name" : "joe"},{" $set" : {" author.name" : "joe schmoe"}})post

  $unset
    刪除某個鍵值
    db.user.update({'name':'joe'},{'$unset':{'addr':1}})ui

  $inc 存在累加,不存在建立
    db.user.update({'name':'joe'},{'$inc':{'age':1}})
  $push 存在追加,不存在建立
    db.user.update({'name':'joe'},{'$push':{'interests':'football'}})this

    db.user.update(
      {"name" : "joe"}, # where條件
      {"$push" : #追加修改器
      {"subject" : #追加對象
      {"$each" : [ #遍歷修改器
        #追加信息
        {"name" : "語文", "rating" : 6.6},
        {"name" : "數學", "rating" : 4.3} ,
        {"name" : "英語", "rating" : 8.0} ,
        {"name" : "物理", "rating" : 7.6},
        {"name" : "化學", "rating" : 9.3} ,
        {"name" : "體育", "rating" : 5.0} ,
      ],
      "$slice" : -5, #最終保留10個追加信息
      "$sort" : {" rating" : -1} #按rating排序
      }
    }
    }
    )
  $ne 若是沒有就
    #若是interests的值沒有basketball就push,保證interests值惟一
    db.user.update({'interests':{'$ne':'basketball'}},{"$push":{'interests':'basketball'}})

  $addToSet 真正用於避免重複插入的方法
    db.user.update({'name':'joe'},{'$addToSet':{'interests':'basketball'}})spa

  $pop 從數組中刪除一個元素
    從interests中刪除一個元素1是從尾部刪,-1從首部刪
    db.user.update({'name':'joe'},{'$pop':{'interests':1}})
  $pull 從數組中刪除指定元素
    db.user.update({'name':'joe'},{'$pull':{'interests':'basketball'}})

  upsert 若是沒有找到符合更新條件的文檔,就會以這個條件和更新文檔爲基礎建立一個新的文檔。若是找到了匹配的文檔,則正常更新。
    db.user.update({'name':'sum'},{'$inc':{'age':1}},true)

  $setOnInsert 只有新建的時候才...
    db.user.update({'name':'bill'},{'$setOnInsert':{'createdAt':new Date()}},true)
  save
    是一個shell函數,若是文檔不存在,它會自動建立文檔;若是文檔存在,它就更新這個文檔。它只有一個參數:文檔。
    要是這個文檔含有"_id"鍵,save會調用upsert。不然,會調用insert。若是在Shell中使用這個函數,就能夠很是方便地對文檔進行快速修改。
    user = db.user.findOne({'name':'jef'})
    user.age = 20
    db.user.save(user)3d

  更新多個文檔
    默認狀況下,更新只能對符合匹配條件的第一個文檔執行操做。要是有多個文檔符合條件,只有第一個文檔會被更新,其餘文檔不會發生變化。
    要更新全部匹配的文檔,能夠將update的第4個參數設置爲true
    db.user.update({},{'$set':{'age':20}},false,true)rest

  findAndModify
    可以在一個操做中返回匹配結果而且進行更新。
      query 查詢文檔,用於檢索文檔的條件。
      sort 排序結果的條件。
      update 修改器文檔,用於對匹配的文檔進行更新(update和remove必須指定一個)。
      remove 布爾類型,表示是否刪除文檔(remove和update必須指定一個)。
      new 布爾類型,表示返回更新前的文檔仍是更新後的文檔。默認是更新前的文檔。
      fields 文檔中須要返回的字段(可選)。
      upsert 布爾類型,值爲true時表示這是一個upsert。默認爲false。
     "update"和"remove"必須有一個,也只能有一個。要是沒有匹配的文檔,這個命令會返回一個錯誤。
    db.user.findAndModify({'query':{'name':'joe'},sort:{'age':1},'update':{'$set':{'sex':'man'}}})

查詢

  簡單查詢
  查找age=20的全部信息 按age正序,跳過10條數據區1條
    db.user.find({'age':20}).sort({'age':1}).limit(1).skip(10);
  多個條件
    db.user.find({'name':'joe','age':20})
  選擇返回字段("_id"這個鍵老是被返回,即使是沒有指定要返回這個鍵。)
    db.user.find({'name':'joe','age':20},{'name':1,'age':1,'sex':1})
  選擇不返回那個字段
    db.user.find({'name':'joe','age':20},{'name':0,'age':0,'sex':0})

  範圍查詢
    $lt 小於,$lte 小於等於,$gt 大於,$gte 大於等於,$ne 不等於
      db.user.find({'age':{'$gt':18,'$lt':100}})
    $nin,$in查詢
      db.user.find({'name':{'$in':['joe','sum']}})
    $or
      db.user.find({'$or':[{'name':'joe'},{'sex':'w'}]})
    $mod 去模運算符
      取年齡對5取模,等於1的數據
      db.user.find({'age':{"$mod":[5,1]}})
    $not
      排除年齡對5取模,等於1的數據
      db.user.find({'age':{'$not':{"$mod":[5,1]}}})

    特定類型查詢
      當數據sex等於null或者沒有sex屬性的時候都會被查出來
        db.user.find({'sex':null})
      只查sex等於null,不查沒有sex屬性的數據
        db.user.find({'sex':{'$in':[null],'$exists':true}})
    正則匹配
      db.user.find({'name':/joe?/i})

    數組查詢
      interests數組中有Football的都會被查出
        db.user.find({'interests':'Football'})
      interests數組中完成相等(數組中元素值和順序必須一致)的纔會被查出
        db.user.find({'interests':['Coding','Cooking']})
      $all 只要有其中的元素就會查出,不是完成相等,跟元素順序無關
        db.user.find({'interests':{'$all':['Football','Basketball']}})
      根據元素位置查找
        db.user.find({'interests.0':'Football'})
      $size 根據元素的個數查找
        db.user.find({'interests':{'$size':3}})
      $slice 指定返回子集合中的n條(n>0表示前n條,0<0表示後n條)
        db.user.find({'name':'joe'},{'interests':{'$slice':2}})
        從第一條開始取兩條
        db.user.find({'name':'joe'},{'interests':{'$slice':[1,2]}})

    內嵌文檔查找
      完成匹配
        db.user.find({'addr':{ "City" : "beijing", "District" : "chaoyang", "Street" : "tianshuiyuan" }})
      內嵌某個屬性查找(能夠查找到City等於beijing的全部文檔)
        db.user.find({'addr.City':"beijing"})
      對subject下的全部數據進行匹配,只要有一個大於等於9分的都會被查出(查詢體育大於9分的文檔)
        db.subject.find({'subject':{'$elemMatch':{'name':'體育','rating':{'$gte':9}}}})

    $where
      在查詢中執行任意的JavaScript代碼
        db.subject.find('$where':function(){
          if(xxxxx){

            return true

            }else{

            return false

          }

        })

    高級查詢選項       $maxscan:integer         指定本次查詢中掃描文檔數量的上限。       $min:document         查詢的開始條件。在這樣的查詢中,文檔必須與索引的鍵徹底匹配。查詢中會強制使用給定的索引。在內部使用時,一般應該使用"$gt"代替"$min"。可使用"$min"強制指定一次索引掃描的下邊界,這在複雜查詢中很是有用。       $max:document         查詢的結束條件。在這樣的查詢中,文檔必須與索引的鍵徹底匹配。查詢中會強制使用給定的索引。在內部使用時,一般應該使用"$lg"而不是"$max"。可使用"$max"強制指定一次索引掃描的上邊界,這在複雜查詢中很是有用。       $showDiskLoc:true         在查詢結果中添加一個"$diskLoc"字段,用於顯示該條結果在磁盤上的位置。

相關文章
相關標籤/搜索