標籤:
安裝mongodb(mongodb-linux-x86_64-3.2.4.tgz)
1 export PATH=$PATH:/usr/local/mongodb/bin
2 /usr/local/mongodb/bin 新增mongodb.conf
port=27017
dbpath=/opt/mongodb/data/db
logpath=/opt/mongodb/logs/mongodb.log
logappend=true
fork=true
3 ./mongod -f mongodb.conf服務端啟動
./mongod -f mongodb.conf --rest
4 停止
use admin
db.shutdownServer();
使用的是【Spring 3.1.2.RELEASE 版本】 + 【spring-data-mongodb 1.3.0.RELEASE】 + 【mongo-java-driver 2.11.1】
show dbs;
db.logfile.stats();
db.collection.stats();
db.logfiledb.stats();
db.collection.find()
db.collection.findOne()
db.getCollection("foo-ee") 得到foo-ee集合
db.collection.remove() //集合本身和索引都會保留
db.drop_collection("collection") //整個集合和索引都被刪除
db.tbname.drop()
db.update{criterial,{"$inc":{"pageviews":1}}} //值加1
db.update{criterial,{"$set":{"key":"val"}}} //值修改
db.update{criterial,{"$push":{"key":"val"}}} //數組push
db.update{{"key":{"$ne":"temp"}},{"$push":{"key":"temp"}}} //如果數組中不存在temp,則插入
db.update{criterial,{"$addToSet":{"key":"temp"}}} //可以插入時避免重複
db.update{criterial,{"$addToSet":{"key":{"$each":["val1","val1","val1"]}}}} //addToSet和each組合
db.update({},{"$pull":{"key":"val1"}})//將所有匹配的部分刪掉
db.update({"comments.author":"jhone"},{"$set":{"comments.$.author":"jim"}})//用定位器替換數組中合格名字
db.update({"count":25},{"$inc":{"count":3}},true)//第三個參數true代表是upsert 沒有匹配的,增加一個25的,再增加為28
db.find(criterial,{"key1":1,"key2":0}) //傳回值包含key1,不含key2
start=new Date("2015-01-01")
db.find({"stat_date",{"$lt":start}} //lt gt lte gte Date精確到毫秒
db.find({"key":{"$ne":"val"}}//key!=val
db.find({"$or":[{"key1":{"$in":[123,"456"]}},{"key2":"val2"}]})//$in多個不同類型的值 $nin $or
db.find({"key":{"$not":{"$mod":[5,1]}})//$mod取餘 %5=1的值 $not
db.find({"key":{"$in":[null],"$exists":true}}) //鍵存在並且值為null
db.find({"key":null})//值為null或者不存在該鍵的文檔
db.find({"key":/val/i})//正則
數組
db.food.insert({"fruit":["apple","banana","peach"]})
db.food.find({"fruit":"apple"})
db.food.find({"fruit":{"$all":["apple","banana"]}}) //同時包含
db.food.find({"fruit.2":"banana"})
db.food.find({"fruit":{"$size":3}})//只能用於尋找定長數組,無法使用範圍查詢
db.food.update({"$push":{"fruit":"strawberry"},"$inc":{"size":1}})
db.food.find({"size":{"$gt":3}})//增加size,實現範圍查詢
db.log.findOne(criterial,{"comments":{"$slice":-10}})//返回數組後十個及文檔所有欄位
db.log.findOne(criterial,{"comments":{"$slice":10}})//返回數組前十個及文檔所有欄位
db.log.findOne(criterial,{"comments":{"$slice":[25,10]}})//返回數組第25個元素到35及文檔所有欄位
db.log.find({"name":{"first":"je","last":"fa"}})//固定順序尋找,完全精確匹配
db.log.find({"name.first":"je,"name.last":"fa"})//無固定順序
db.log.find({"comments":{"name.first":"je,"name.last":"fa"}})//comments儲存數組,只要comments裡面的多個內嵌文檔加起來包含兩個值即可,與下面一個區別
db.log.find({"comments":{"$elemMatch":{"name.first":"je,"name.last":"fa"}}})//comments儲存數組,elemMatch指定了數組單個內嵌文檔限定條件
//where不能使用索引
db.log.find({"$where":"this.x+this.y==10"})
db.log.find({"$where":"function(){return this.x+this.y==10;}"})
db.stock.find({"desc":"mp3"}).limit(50).skip(50).sort({uname:1,age:-1})//skip太多影響效能,sort 1升序 -1降序 分頁尋找
//索引
db.log.ensureIndex({"date":1,"uname":1},{"name":"date_1_uname_1"})//索引名稱
db.log.ensureIndex({"date":1},{"unique":true},{"background":true})//索引名稱 幕後處理可以防止建立索引時阻塞請求
db.stock.find({"desc":"mp3"}).hint({"desc":1})
//地理空間索引時假設在一個平面上
//按照精緯度尋找靠近的點文檔
{"gps":{"x":-30,"y":30}}
db.map.ensureIndex({"gps":"2d"},{"min":-1000,"max":1000})
db.map.find({"gps":{"$near":[40,-73]}}).limit(10)
db.runCommand({geoNear:"map",near:[40,-73],num:10})
//按照精緯度尋找咖啡店
db.map.ensureIndex({"gps":"2d","desc":1})
db.map.find({"gps":{"$near":[40,-73]},"desc":"coffee"}).limit(1)
db.log.count()
db.log.count({"x":1})
[{"day":"2010-10-03","time":"2010-10-03 03:55:22",price:3},{"day":"2010-10-03","time":"2010-10-03 04:55:22",price:3},{"day":"2010-10-03","time":"2010-10-03 05:55:22",price:3}]
db.runCommand({"distinct","tbname","key":"userid"})
db.runCommand({"group":{
"ns":"gp",//集合名
"key":{"day":true}, //分組欄位
"initial":{"time":0},
"$reduce":function(doc,prev){//max
if(doc.time>prev.time){
prev.price=doc.price;
prev.time=doc.time;
}
},
"$finalize":function(prev){//改變返回結果
if(prev.price=3){
delete prev.price
}
}
}
})
mongodb 規定 group一次的記錄不能超過10000條,超過10000條的 必須用map reduce計算
//map reduce
map=function(){
for(var key in this){
emit(key,{count:1});
}
}
reduce=function(key,emits){
total=0;
for(var i in emits){
total+=emits[i].count;
}
return {"count":total};
}
mr=db.runCommand({"mapreduce":"tbname","map":map,"reduce":reduce})
db[mr.result].find()
db.listCommands()
//固定集合,可以在程式中使用尾部遊標擷取新添加的文檔
db.createCollection("collection",{capped:true,size:10000,max:100})//建立固定集合,大小事10000位元組
db.createCollection("mycappedcoll",{capped:true,size:10000,max:100,autoIndexId:false})
db.my_collection.find().sort({"$natural":-1})//按照插入順序查詢也就是自然順序,-1是反向
//建立使用者
db.createRole(
{
role: "root",
privileges: [
{ resource: { db: "logfile", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }
],
roles: []
}
)
db.createUser(
{
user: "root",
pwd: "pwd",
roles: [root]//root預設超級管理員
}
)
db.createUser( {
user: "logfile",
pwd: "pwd",
roles: [ { role: "root", db: "logfile" } ]
});
db.getUsers()
db.grantRolesToUser("root",[{role:"root", db:"logfile"}])
db.auth("root","jscnbi_123654")
mongodb安裝及基礎命令