1. 程式人生 > >MongoDB學習筆記(二)_常用增刪改查命令

MongoDB學習筆記(二)_常用增刪改查命令

  1. 建立資料庫:use testdb
  2. 建立集合
  • 固定集合:需要指定size。比如:

db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})

表示建立名為mycol的固定集合,以optionId作為索引,集合空間大小為6142800KB,最多儲存10000個文件。

  • 直接插入資料,自動建立集合。

db.mycol.insert(name:"ljs_coding")

     3.檢視集合:show collections

     4.刪除集合:db.mycol.drop(),返回true表示刪除成功

     5.插入文件:

  • 直接插入資料:db.mycol.insert({name:"wust",password:"zz",location:"wuhan"})
注意:3.2版本之後可用insertOne()和insertMany()方法,後者在[]中用逗號將不同文件進行分隔。
  • 先定義變數再插入:

document=({name:"wust",password:"zz",location:"wuhan"});

db.mycol.insert(document)

注意:此處定義有小括號有分號。

      6.更新文件:

  • update()方法

<query>相當於where,<update>相當於set,upsert控制無對應記錄時是否插入,multi控制是否多條更新,false表示只更新符合條件的第一條記錄。writeConcern控制丟擲異常的級別。

比如:db.mycol.update({name:"wust"},{$set:{password:"hh"}},false,true)將所有name為"wust"的記錄中password都改為"hh"。

db.mycol.update({name:"wust"},{$set:{password:"zz"}},true,true),由於此時已有name為"wust"的記錄,所以不會增加,結果為將所有記錄的password改為"zz"

db.mycol.update({name:"hust"},{$set:{password:"zz"}},true,true),由於此時沒有name為"hust"的記錄,所以新增一條。

注意:3.2版本之後提供updateOne()和updateMany()方法刪除單條和多條

  • save()方法

用傳入的文件替換已有的文件。

      7.刪除文件:deleteOne()和deleteMany()

比如:db.mycol.deleteOne({name:"wust"})和db.mycol.deleteMany({name:"wust"})

      8.檢視文件:findOne()和find()

  • find().pretty()以格式化資料返回所有文件,findOne()不包括該方法。
  • 條件操作符:$lt,$lte,$gt,$gte,$ne,根據英文縮寫理解,不加以贅述。

比如:db.mycol.find({count:{$lt:10}}).pretty()格式化返回count<10的所有記錄。

  • AND和OR

比如: db.mycol.find({password:"zz",$or:[{count:{$lt:0.0}},{count:{$gt:3.0}}]})返回的是password為"zz"且count<0或>3的所有記錄。

注意:一定要檢查大括號匹配,如果寫成了{password:"zz"},{$or:[{count:{$lt:0.0}},{count:{$gt:3.0}}]}就不是一條查詢語句了,查詢出的是password為zz的所有記錄,後面的限制條件失去作用,而且返回的也並非所有屬性,測試時只返回了_Id。



上圖也是同樣的錯誤,所以識別成了projection,都是粗心的小錯誤,注意避免。

  • projection引數使用方法(限制返回哪些屬性),下圖來自菜鳥教程。
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的鍵,不返回其他鍵
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的鍵,返回其他鍵
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正確
querydb.collection.find({}, {title: 1})

最後一種是不指定查詢條件的情況,需要指定projection。