常見命令
show dbs //顯示有哪些數(shù)據(jù)庫
use test //使用某個(gè)數(shù)據(jù)庫,如果已經(jīng)有了該數(shù)據(jù)庫會(huì)切換到該數(shù)據(jù)庫脓匿;如果沒有會(huì)創(chuàng)建該數(shù)據(jù)庫静檬,創(chuàng)建數(shù)據(jù)的時(shí)候,只有往數(shù)據(jù)庫里面插入值的時(shí)候赚导,通過show dbs 才會(huì)看見真正創(chuàng)建該數(shù)據(jù)庫
db.createCollection('tests')//創(chuàng)建一個(gè)集合
db.test2.insert({"name":"hello"})//往集合中插入數(shù)據(jù)派殷,也會(huì)自動(dòng)創(chuàng)建集合
db //查看當(dāng)前是哪個(gè)數(shù)據(jù)庫
use test && db.dropDatabase() //刪除數(shù)據(jù)庫
show tables //顯示有哪些集合
db.test.drop() //刪除數(shù)據(jù)庫里面的集合
db.test.insert()//往集合里面插入文檔 (增)
db.test1.remove({"name":111})//刪除集合里面的文檔 刪)
b.test1.update({name:1}, {$set:{age:3}})//修改集合里面的文檔 (改)
db.test.find()//查詢集合里面的文檔 (查)
db.test1.count()// 返回集合里面的文檔的條數(shù)
/////////////////////// 增加相關(guān)操作 //////////////////////////////////
db.test1.insert({name:1,age:2}) //往test1集合里面添加一條數(shù)據(jù)
db.test1.insert([{name:1},{age:2}, {name:1,age:2}]) //批量插入多條數(shù)據(jù)
//insert.js
var db = connect('test');
for(var i=0; i<1000; i++) {
db.test1.insert({name:'mzr', age:i});
}
//進(jìn)入到mongo客戶端录语,執(zhí)行l(wèi)oad('./insert.js') 插入多條數(shù)據(jù),只是模擬魂迄,這種情況插入多條數(shù)據(jù)不建議
////////////////////// 刪除相關(guān)操作 //////////////////////////////////
db.test1.remove({}) //刪除test1集合里面所有的數(shù)據(jù)
////////////////////// 更新相關(guān)操作 /////////////////////////////////
db.test1.update({name:1},{$inc:{age:2}}) //找出name是1的,并且更新age+2
db.test1.update({name:1}, {$push:{hobby:"1111"}}) //往數(shù)組里面添加一條數(shù)據(jù): 更新name為1的耸三,并且往hobby字段里面push一條數(shù)據(jù)
db.test1.update({name:1}, {$addToSet: {hobby:'1111'}}) // 往數(shù)組里面添加一條不重復(fù)的數(shù)據(jù):更新name為1的乱陡,并且往hobby字段里面添加一條數(shù)據(jù),如果有了仪壮,就不會(huì)再添加
db.test1.update({name:1}, {$addToSet: {hobby:{$each:[1,2,3,4]}}})//往數(shù)組里面添加多條不重復(fù)的數(shù)據(jù): 更新name為1的憨颠,并且往hobby字段里面添加數(shù)據(jù),怎么添加呢积锅,遍歷添加多條數(shù)據(jù)
db.test1.update({name:1}, {$pop:{hobby:1}}) //刪除hobby數(shù)組里面的最后一個(gè)元素
db.test1.update({name:1}, {$set:{"hobby.4":"你好啊"}})//將hobby數(shù)組里面的索引為4的元素改了
//以腳本的形式運(yùn)行
var modify = {
//要操作的集合
findAndModify: 'test1',
//指定查詢條件
query: {name: 4}
//指定如何更新爽彤,把年齡加100
update: {$set :{age: 100}}
//指定返回的字段
fields: { age: true, _id: false }
//表示按age字段進(jìn)行正序排列
sort:{age:1},
//new為true,返回更新后的文檔
new: true
}
var db = connect('test');
var result = db. runCommand(modify);//可以返回更新后的文檔
printjson(result)
////////////////////// 查詢相關(guān)操作 /////////////////////////////////
db.test1.find({},{name:1,_id:0}) //只需要name字段,排序_id字段
db.test1.find({'_id':{"$lt":ObjectId("5b334f96c3061fed28b54b14")}}).sort({"_id":-1}).limit(1)//查詢某
常見運(yùn)算符
$set //設(shè)置值更新某個(gè)值
$unset //刪除某個(gè)字段
$gt //表示大于
$lt //表示小于
$gte //表示大于等于
$lte //表示小于等于
$inc //表示增加 //increment簡(jiǎn)寫
$push //往數(shù)據(jù)里面追加一條數(shù)據(jù)
$ne //不等于
$addToSet //如果原來有數(shù)據(jù)了就不會(huì)再添加了
查詢相關(guān)操作(1分插入缚陷,9分查詢)
通過id進(jìn)行查詢
db.collectoin_name.find({"_id" : ObjectId("value")})
-
查詢指定列
db.collection_name.find({queryWhere},{key:1,key:1})
eg:db.test1.find({}, {age:1, _id:0})
- collection_name 集合的名字
- queryWhere 參閱查詢條件操作符
- key 指定要返回的列
- 1 表示要顯示适篙, 0表示不顯示
查詢匹配結(jié)果的第一條數(shù)據(jù),當(dāng)找到符合條件的就不會(huì)往下繼續(xù)遍歷查找,效率高
db.collection_name.findOne()
eg:db.test1.findOne({},{age:1, name:1,_id:0})
$in 查詢符合某幾個(gè)值的記錄(枚舉)
db.test1.find({age:{$in:[3,2]}}, {name:1,age:1, _id:0})
// 查詢age為3和2的$nin 查詢不符合某幾個(gè)值的記錄
db.test1.find({age:{$nin:[3,2]}}, {name:1,age:1, _id:0})
//查詢age不是2和3的查詢某個(gè)范圍之間的記錄(不包前箫爷,也不包后)
db.test1.find({age:{$gt:2, $lt:7}})
//查詢age>2并且age<7的查詢某個(gè)范圍之間的記錄(包前也包后)
db.test1.find({age:{$gte:2, $lte:7}})
//查詢age>=2并且age<=7的查詢不在某個(gè)范圍之類的記錄 db.test1.find({name:{$not:{$gt:2, $lt:7}}}) //查詢age<2或者age>7的
$where 查詢單邊范圍的數(shù)據(jù)
db.test1.find({$where:"this.age>4"})
//查詢age>4的數(shù)據(jù)
db.test1.find({$where:"this.age>4&& this.age<8"})
//查詢age大于4的嚷节,并且age小于8的-
查詢喜歡某個(gè)愛好的記錄
> db.test1.find() //查詢當(dāng)前集合中的所有的記錄 { "_id" : ObjectId("5b34a0cad70d23f4a9907fb6"), "name" : 1, "hobby" : [ "smoking" ] } { "_id" : ObjectId("5b34a13cd70d23f4a9907fb7"), "name" : 2, "hobby" : [ "drinking" ] } { "_id" : ObjectId("5b34a143d70d23f4a9907fb8"), "name" : 2, "hobby" : [ "hair" ] } { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:'smoking'}) //查詢喜歡抽煙的 { "_id" : ObjectId("5b34a0cad70d23f4a9907fb6"), "name" : 1, "hobby" : [ "smoking" ] } { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$all:['smoking', 'drinking']}}) //查詢既喜歡抽煙又喜歡喝酒的記錄聂儒,且的關(guān)系 { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$in:['smoking', 'drinking']}}) //查詢喜歡抽煙或者喝酒的,或的關(guān)系 { "_id" : ObjectId("5b34a0cad70d23f4a9907fb6"), "name" : 1, "hobby" : [ "smoking" ] } { "_id" : ObjectId("5b34a13cd70d23f4a9907fb7"), "name" : 2, "hobby" : [ "drinking" ] } { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$size:2}}) //查詢有兩個(gè)愛好的人 { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$size:2}}, {hobby:{$slice:1}, _id:0}) //查詢有兩個(gè)愛好的硫痰,并且hobby字段只要里面的第一個(gè)數(shù)據(jù)衩婚; $slice:2,截取前兩個(gè) { "name" : 2, "hobby" : [ "smoking" ] } { "name" : 3, "hobby" : [ "smoking" ] }
正則查詢
db.collection.find({key:/value/})
eg:db.collection.find({key:/age/})
大于符號(hào)查詢
db.collectoin_name.find({<key>:{$gt:<value>}})
eg:db.students.find({age:{$gt:30}})
大于等于符號(hào)查詢
db.collectoin_name.find({<key>:{$gte:<value>}})
eg:db.students.find({age: {$gte: 30}})
小于符號(hào)查詢
db.collectoin_name.find( {<key>:{$lt:<value>}})
eg:db.students.find({age: {$lt: 30}})
查詢age 小于30的數(shù)據(jù)小于等于符號(hào)查詢
db.collectoin_name.find({<key>:{$lte:<value>}})
eg:db.students.find({age: {$lte: 30}})
同時(shí)使用 $gte和$lte
db.collectoin_name.find({<key>:{$gte:<value>},<key>:{$lte:<value>}})
eg:db.students.find({age: {$gte: 30, $lte: 50}})
等于
db.collectoin_name.find({<key>:<value>,<key>:<value>})
eg:db.students.find({"age": 30})
使用 _id進(jìn)行查詢 使用_id進(jìn)行查詢
db.collectoin_name.find({"_id" : ObjectId("value")})
eg:db.students.find({_id:ObjectId("5adb666ecd738e9771638985")})
查詢結(jié)果集的條數(shù)
db.collectoin_name.find().count()
eg: db.students.find().count()正則匹配
db.collection.find({key:/value/})
eg:db.students.find({name:/^age/})
and 與
db.collection_name.find({key1:value1, key2:value2})
eg:db.students.find({name:'zfpx',age:1})
or 或
db.collection.find({$or:[{key1:value1}, {key2:value2}]})
eg:db.students.find({$or:[{age:30},{age:50}]})
-and和or聯(lián)用db.collection.find({key1:value1, $or:[{key1:value1}, {key2:value2}]})
eg:db.students.find({name:'zfpx',$or:[{age:30},{age:50}]})
查詢 name是zfpx 并且 age是30 或者 age是 50 的數(shù)據(jù)limit 分頁查詢
db.collectoin_name.find().limit(number)
eg:db.students.find().limit(3)
skip跳過指定數(shù)量查詢
db.collectoin_name.find().skip(number)
eg:db.students.find().skip(3)
skip+limit實(shí)現(xiàn)分頁功能
db.collectoin_name.find().skip(skipNum).limit(limitNum)
eg:db.students.find().skip(3).limit(3);
跳過3條并且取出三條sort 排序
db.collectoin_name.find().sort({key:1}) 1表示升序效斑,-1表示降序
eg:db.students.find().sort({age:1})
通過配置項(xiàng)啟動(dòng)數(shù)據(jù)庫
- 新建配置文件mongod.conf
datapath=/data/mongodb/data //存放數(shù)據(jù)的目錄 logpath=/data/mongodb/log //存放日子的目錄 port=5000 //開啟的端口號(hào) fork=true //在后臺(tái)運(yùn)行 auth=true //以安全方式啟動(dòng)數(shù)據(jù)庫非春,默認(rèn)不驗(yàn)證
- 啟動(dòng)服務(wù)器
mongod --config mongod.conf
- 啟動(dòng)客戶端
mongo --port 5000