1. 程式人生 > >Mongodb基本操作入門,增刪改查和索引

Mongodb基本操作入門,增刪改查和索引

less multi zhang 一個 attribute var sin 第一個 base

主要進程

mongod.exe為啟動數據庫實例的進程。

mongo是一個與mongod進程進行交互的JavaScript shell進程,它提供了一些交互的接口函數用戶對數據庫的管理。

基本命令

show databases; 查詢數據庫列表

show collections; 查詢全部的集合 相應關系型數據庫的表

use test; 數據庫切換 切換到test數據庫


mongodb數據庫記錄成為文檔

插入文檔命令

db.customers.save({name:"張三",age:15,address:‘北京東城"}); 向集合customer庫插入一個文檔

for(var i=1;i<=100;i++) db.customers.save({name:"張三"+i,age:i,telephone:"1861400275"+i}); 批量插入100個文檔

查詢選擇器

db.customers.find();

db.customers.find({name:"張三11‘});

db.customers.find({age:{$lt:45}}); keyword $lt less than 小於

$lte 小於等於 less than equals

$gt 大於 greater than

$gte 大於等於 greate than equals

db.customer.find({age:{$lt:45,$gt:35}});

db.customer.find({age:{$in:[34,35,36]}}); $in 值在範圍內 $nin 值不在範圍內

db.customer.find({age:{$ne:50}}); $ne keyword的值不等於

db.customer.find({$or:[{age:{$lt:5},{name:"zhangsan"}}]}); $or 或 age小於5或name等於zhangsan

db.customer.find({$and:[{age:{$lt:5},{name:"zhangsan"}}]}); $and 且 兩個條件同一時候滿足

db.customer.find({id:{$exists:false}}); 等價於 db.customer.find({id:null});

MongoDB表結構是不固定的,有時須要返回包括某個字段的全部記錄或不包括的


查詢投射

查詢的結果集返回指定的字段

db.customer.find({age:{$lt:10}},{_id:0,id:1,name:1}); _id:0 表示不返回_id

第一個{}內為查詢選擇器。第二個{}為對前面返回的結果集進行進一步過濾的條件,即投射項。

db.customer.find().skip(10).limit(5).sort(id:-1); 跳過前十條,取五條,id:-1表示降序排列

數組操作

文檔的屬性為數組 AttributeValue:["收腰型","修身型","直筒型","寬松型"]

db.DictGoodsAttribute.find({"AtributeValue":"收腰型"}); 僅僅要屬性中包括該值,就能返回

匹配數組中指定位置的元素值

db.DictGoodsAttribute.find({"AttributeValue.0":"收腰型"}); 第一個屬性值為"收腰型"


增該刪操作

添加記錄 db.customer.save();

1.第一次插入數據時,不須要預先創建集合,插入數據時會自己主動創建

2.插入時會默認創建主鍵_id,類型為ObjectId類型,這樣設計為了更好地支持分布式存儲

3._id插入時復制不能反復


改動語句 條件 賦值

db.customer.update(query,update,<upsert>,<multi>);

query為過濾條件 update為賦值 若僅僅包括字段,不包括操作項,則會發生代替性更改

upsert 可選參數 boolean類型 默覺得false,更新匹配記錄,找不到則插入新的文檔到集合,插入新記錄

multi 可選參數 boolean類型 默覺得false。更新匹配到的第一個文檔,當為true時,更新全部匹配的文檔

db.customer.update({id:5},{$set:{name:"zhangsan"}},{upsert:true},{multi:true});


刪除語句

db.customer.remove({name:"zhangsan"}); 刪除全部 name:zhangsan的文檔

db.customer.remove({name:"zhangsan"},1); 刪除第一個匹配文檔

db.customer.remove({}); 刪除全部文檔。但不刪除相應的索引集合,文檔對象也會從相應的數據文件裏刪去


索引

和關系型數據庫一樣,索引的主要作用:提高數據獲取的性能

MongodDB的數據結構也是B+樹

單字段索引

db.customer.ensuerIndex({name:1},{unique:true}); 字段name創建索引,unique 說明是唯一索引

唯一索引創建成功後,會在對應的數據庫系統集合system.indexes添加一條索引記錄

db.system.indexes.find() 查看全部索引

db.customer.find({name:"zhangsan"}).explain();能夠使用explain()查詢分析函數查看添加索引後查詢比較

符合索引

db.customer.find({name:1,age:1}); 在兩個字段上進行索引

未使用索引,選擇器 explain函數解析結果

技術分享

在字段name上加入索引。explain解析結果技術分享


對一個值為數組類型的字段創建索引。默認對數組中的每個元素創建索引

AttributeValue:["0-99","100-299","300-499"] 此時創建的索引為全部元素索引

元素為嵌套文檔 statusInfo:[{status:9,desc:"已取消"},{status:10,desc:"已發貨"}]

為單個字段創建索引 ensureIndex({"statusInfo.desc":1});


索引的刪除

db.customer.dropIndex("_name"); 參數為索引名









Mongodb基本操作入門,增刪改查和索引