mongodb學習(入門。。。。。)

db.xs.insert({name:zhangsan})   db:當前數據庫  xs:學生集合(沒有的話自動建立) java

 

show collections   顯示當前數據庫的集合名字c++

 

show dbs  顯示當前數據庫名字數據庫

 

db.getName()    顯示當前數據庫名字ubuntu

 

db.getCollectionNames()      顯示當前集合名字c#

 

 db.dropDatabase()     刪除數據庫命令數組

 

db.wtd.drop()  刪除當前集合名字dom

 

 db.createUser({user:"123",pwd:"123",roles:[{role:"read",db:"admin"}]})     插入用戶名jsp

 

db.system.users.find().pretty()    查詢數據庫中的user信息函數

 

db.dropUser("123")      刪除數據庫中的用戶ui

 

function cha(obj){var d=db.getCollection("wtdd");d.insert(obj);}    定義function函數

 

cha({"123123":"123333333333"})        執行函數,注意花括號

 

db.wtdd.find()                    查詢數據庫內容

 

db.wtdd.drop()                 刪除當前集合

 

db.wtdd.remove({123:"123"})            刪除集合內的元素

 

var shu=[{name:"zs",age:13,sex:"nan"},{name:"ls",age:27,sex:"nv"},{name:"zl",age:10,sex:"nan"},{name:"ww",age:27,sex:"nv"}]

db.wtdd.insert(shu)

 

db.wtdd.find({"name":"ww"},{_id:0})     find({},{}) 第一個花括號裏面是限制條件,第二個是輸出限制條件1輸出,0不輸出

 

db.wtdd.find({name:"ww"},{_id:0,name:1})      只顯示name,{ "name" : "ww" }

 

db.wtdd.find({age:{$gte:13}})    查找age大於等於13的人

 

 db.wtdd.update({name:"ww"},{$set:{name:"wwwwww"}})    更新操做

 

db.wtdd.update({name:"wwwwww"},{$set:{size:"wwwwww"}},false,false)  update增長列操做,第一個是true找不到就新增一列(false只更新找到的),第二個true更新全部匹配到的信息(false只更新第一個找到的)

 

db.wtdd.find({sex:{$in:["nv","nan"]}})       找到字段中包含[*,*,*],尋找*的,$in找到其中一個就行,能夠是  db.wtdd.find({sex:{$in:[null]}}) 尋找字段爲null的數據

 

db.wtdd.update({sex:{$in:[null]}},{$set:{sex:"nan"}},false,true) 尋找到sex爲null的數據後增添列設置爲nan

 

db.wtdd.find({$and:[{age:{$lt:27}},{age:{$not:{$in:[null]}}}]},{_id:0})   找到age不爲空的而且年齡小於27歲,and數組裏面是對象,用{}擴住

 

db.wtdd.find({age:{$not:{$lt:27}}})  查找年齡大於27歲的,此時若是age爲null也會被掃描進來,應該加判斷條件判斷age不爲null

 

for(var i=1;i<=10;i++) db.wtdd.insert({_id:i,name:i,age:i})        批量存入數據

 

db.wtdd.find({}).limit(4)    只輸出前四個數值

 

db.wtdd.find({}).limit(4).skip(2)       跳過前兩個,從第三個開始輸出數值

 

db.wtdd.find({"like.0":"jsp"})                   找到數組中第0個數爲jsp的數,下標從零開始

 

db.wtdd.find({like:{$all:["jsp","java"]}})      查找數組元素中油查找元素的數據

 

db.wtdd.update({like:{$size:2}},{$set:{size:2}},false,true)  查找到數組元素大小爲2的數據賦值列大小爲2

 

db.wtdd.update({_id:1},{$push:{like:"12"},$inc:{size:1}})   找到id爲1的數據,添加元素兵使size+1,這裏的$inc不用加花括號

 

db.wtdd.update({_id:1},{$inc:{size:1}})    單純設置一個數+1

 

db.wtdd.find({_id:1},{like:{$slice:[-1,123]}})            slice中的參數第一個是起始下標,第二個參數是輸出的數目,若是第一個參數是-1,第二個參數必須是>=1,只輸出最後一個數

 

db.wtdd.save({_id:1,name:1,age:123})   insert和save的區別:insert不能重複id鍵,save能夠重複主鍵id,重複以後只有如今的,原來的數組元素都會刪掉,至關於刪掉後添一條

 

db.wtd.remove({})  一鍵刪除集合中的全部數據,參數爲{}花括號

 

db.wtdd.update({_id:1},{$set:{age:"123123123123"}})     當原來的數據有這一列的時候會更新掉原來的數據

 

能夠本身設置_id號,insert()裏面參數是_id:123

 

db.wtdd.find({"like.1":"java"})  ------------------db.wtdd.find({like:"java"})    兩個都能查找數組內的元素是否有java

 

·db.wtdd.update({_id:1},{$unset:{age:"fuck"}})    先找到,後執行刪除$unset操做,後面的fuck參數隨便寫。

 

db.wtdd.update({_id:1},{$unset:{name:""}})不謝也行

 

db.wtdd.update({_id:1},{$set:{like:["c++","java"]}})---------------------db.wtdd.update({_id:1},{$push:{like:"c+"}})  向數組中添加數據

db.wtdd.update({name:{$lt:7}},{$set:{like:["jsp","java"]}},false,true)   增長數組元素

 

db.wtdd.update({_id:1},{$push:{likes:"c#"}})    push操做直接生成一個數組,沒有的話承建一個,有的話插進去

 

db.wtdd.update({_id:1},{$addToSet:{like:"c+++"}})  添加的時候進行判斷,有重複的加不進去,push不檢查直接插進去

 

db.wtdd.update({_id:1},{$pop:{like:1}})     參數爲1刪除最後一個數,參數爲-1時刪除第一個數

 

db.wtdd.update({_id:1},{$pushAll:{like:["java!!","c++--","c#"]}})        同時插進去好多個數

 

db.wtdd.update({_id:1},{$pull:{like:"c#"}})     pull刪除數組中的指定值,有重複的都會被刪掉

 

db.wtdd.update({_id:1},{$pullAll:{like:["c+","java"]}})   pullAll刪除數組中的的許多值,有重複的一併都刪掉

 

> var ite=db.wtdd.find()

> while(ite.hasNext()){var to=ite.next();print(to._id);}   利用迭代器操做查找數據集

 

 https://paste.ubuntu.com/p/dntz6p6BYq/

 

var persons = [{
	name:"jim",
	age:25,
	email:"75431457@qq.com",
	c:89,m:96,e:87,
	country:"USA",
	books:["JS","C++","EXTJS","MONGODB"]
},
{
	name:"tom",
	age:25,
	email:"214557457@qq.com",
	c:75,m:66,e:97,
	country:"USA",
	books:["PHP","JAVA","EXTJS","C++"]
},
{
	name:"holiday",
	age:26,
	email:"344521457@qq.com",
	c:75,m:63,e:97,
	country:"USA",
	books:["JS","JAVA","C#","MONGODB"]
},
{
	name:"zhangsan",
	age:27,
	email:"2145567457@qq.com",
	c:89,m:86,e:67,
	country:"China",
	books:["JS","JAVA","EXTJS","MONGODB"]
},
{
	name:"lisi",
	age:26,
	email:"274521457@qq.com",
	c:53,m:96,e:83,
	country:"China",
	books:["JS","C#","PHP","MONGODB"]
},
{
	name:"wangwu",
	age:27,
	email:"65621457@qq.com",
	c:45,m:65,e:99,
	country:"China",
	books:["JS","JAVA","C++","MONGODB"]
},
{
	name:"zhaoliu",
	age:27,
	email:"214521457@qq.com",
	c:99,m:96,e:97,
	country:"China",
	books:["JS","JAVA","EXTJS","PHP"]
},
{
	name:"piaoyingjun",
	age:26,
	email:"piaoyingjun@uspcat.com",
	c:39,m:54,e:53,
	country:"Korea",
	books:["JS","C#","EXTJS","MONGODB"]
},
{
	name:"lizhenxian",
	age:27,
	email:"lizhenxian@uspcat.com",
	c:35,m:56,e:47,
	country:"Korea",
	books:["JS","JAVA","EXTJS","MONGODB"]
},
{
	name:"lihuiying",
	age:21,
	email:"lihuiying@uspcat.com",
	c:36,m:86,e:32,
	country:"Korea",
	books:["JS","JAVA","PHP","MONGODB"]
},
{
	name:"zhangsuying",
	age:22,
	email:"zhangsuying@uspcat.com",
	c:45,m:63,e:77,
	country:"Korea",
	books:["JS","JAVA","C#","MONGODB"]
}]

 

 

 

查詢語文成績大於85或者英語大於90的學生信息 

 

   db.persons.find({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1})    or操做用[]包括

 

查詢出名字中不存在」li」的學生的信息

cha.find({name:{$not:/li/i}},{_id:0,name:1})

查詢國籍不是中國或美國的學生信息 

 db.persons.find({country:{$nin:[「USA」,「China」]}})                             $not用於任何取反操做,$nin只適用於集合操做。

$all ----------------->[a,b,c,d]數組中的都得存在

 

cha.find({books:{$all:["JS","MONGODB"]}},{_id:0,name:1,age:1}).sort({age:1})       sort參數爲{},參數爲1是從小到大,參數爲-1是從大到小

 

 

var find=cha.find()
> while(find.hasNext()){var to=find.next();cha.update({name:to.name},{$set:{size:to.books.length}},false,true)}       經過函數實現增長列元素,查找喜歡的書是三個的操做。

 

cha.find({name:"jim"},{books:{$slice:[1,2]}})                silice實現輸出插片輸出    books:{$slice:-1}  直接輸出最後一個數

 

找到年齡大於22歲,在K學校上過學的學生而且喜歡C++

cha.find({age:{$gt:22},books:"C++","school.school":"K"},{_id:0}).pretty()

 

以j開頭的數據:/^j/,以ok結尾的數據:/ok$/,含有ij的數據:/ij/,查詢部分大小寫的數據:/ij/i  後面的i

 

function haha(){var t=Math.floor(Math.random()*1000);print(t);}       隨機生成函數,*100就是1-100的數,floor向負無窮取整,ceil是向正無窮取整。

 

執行文檔操做,返回文檔操做以前或者以後的結果,主要是new的賦值,找不到爲null

ps = db.runCommand({
"findAndModify":"persons",
"query":{name:"test"},
"update":{"$set":{"age":11}},
"new":true
}).value
--"findAndModify" 集合名
--"query" 查詢器
--"update" 修改器
--"new" 狀態--若是 true 表示返回結果是更新後的,false 爲更新前
--"sort" 排序

 查找函數

distinct操做,後面value和values結果不同,value只處理一個結果,values處理許多結果

col = db.runCommand({distinct:"wtdd",key:"name"}).values

distinct元組內全部的不同的元素

 

集合操做分組,condition能夠省略,那個是限制結果底線的

db.runCommand({
group:{
ns:集合名字,
Key:分組的鍵對象,
Initial:初始化累加器,
$reduce:組分解器,
Condition:條件,
Finalize:組完成器
}
})

按照國家分類找出e最大的數,function中的參數一個是now,一個是pre

db.runCommand({
group:{
ns:"wtd",
key:{"country":true},
initial:{e:0},
$reduce:function(now,pr){
if(now.e>pr.e){
pr.e=now.e;
pr.name=now.name;
}
},
// condition:{e:{$gt:80}}

finalize:function(pr){                                   將輸出值有必定的格式輸出
pr.e = pr.name+" -> scores "+pr.e
}

}
})

 

聚合操做,流水線,先找到而後處理數據,按照status等級A,B,C分類後求出每一個等級的總和

必須爲_id,

db.w.a([{$match:{status:{$in:['A','B','C']}}},{$group:{"_id":'$status',sum:{$sum:'$amount'}}}])

 

mapReduce

var map = function(){emit(this.location,this.name);}     第一個參數:依據分類的組,第二個參數:this.name是要如今的字符串有用作連接啥的,計數的話能夠是數字1,就是放一個東西到了每個group裏面

var reduce = function(key,values){return values.join(",");}   function函數放着對數據的運用,key是上一個map中的分類列,後面是對每一個group中存的東西進行計算,就是上一個map中放進來的東西

var options = {out:"age_sum"}       把結果寫入到集合中,以便查找

db.my.mapReduce(map,reduce,options)   執行mapReduce操做

db.age_sum.find().pretty()  從查找的集合中顯示出結果

 

 

var map = function(){emit(this.location,this.name);}
> var reduce = function(key,values){return key+":"+values.join(",");}
>var options = {query:{age:{$lt:25}},out:"haha"}       在options中能夠進行元素選擇。
> db.my.mapReduce(map,reduce,options)                 

> db.haha.find()           

mapReduce中間的參數能夠能夠調換名字,名字能夠隨便調換,函數調用順序不能變換

-----------------------------------------------分割線--------------------------------------------------------------------

相關文章
相關標籤/搜索