基本命令
显示当前数据库服务器上的数据库
show dbs
切换到指定数据库的上下文,可以在此上下文中管理testdb数据库以及其中的集合等
use testdb
显示数据库中所有的集合(collection)
show collections
查看数据库服务器的状态
db.serverStatus()
查询指定数据库统计信息
use fragment
db.stats()
基本DDL和DML
创建数据库。
直接通过use dbname来切换到这个数据库上下文下面,系统会自动延迟创建该数据库。
use testdb
show dbs (此刻可能testdb数据库并没有被创建)
db (显示当前使用的数据库,结果位testdb)
db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'}) (插入一条数据)
show dbs (此刻能看到testdb被创建)
删除数据库。
直接使用db.dropDatabase()即可删除数据库。创建集合。
db.createCollection('replicationColletion', {'capped':true, 'size':10240, 'max':17855200})
show collections
删除集合。
db.mycoll.drop()
增加纪录。
两种插入方法
db.storeCollection.save({‘version’:’3.5′, ‘segment’:’e3ol6′})
db.storeCollection.insert({‘version’:’3.5′, ‘segment’:’e3ol6′})若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容。
如:
已存在数据: {_id : 1, ” name ” : ” n1 ” },再次进行插入操作时,
insert({_id : 1, ” name ” : ” n2 ” }) 会报主键重复的错误提示
save({ _id : 1, ” name ” : ” n2 ” }) 会把 n1 修改为 n2 。
相同点:
若新增的数据中没有主键时,会增加一条记录。
已存在数据: { _id : 1, ” name ” : ” n1 ” },再次进行插入操作时,insert({ " name " : " n2 " })
插入的数据因为没有主键,所以会增加一条数据save({ " name " : " n2 " })
增加一条数据。循环插入
for(var i = 1; i < 100; i++) {
db.testCollection.insert({ age : i % 7, name : 'name' + Math.round((10 + 20 * Math.random())), password : '123456' })
}
更新记录。
db.testCollection.update({age: 6}, {$inc: {age: 1}}) //选择age为6的一条记录,使他的age加1.
db.testCollection.update({age: 7}, {$set: {password : '456789'}}) //选择age为7的一条记录,设置password为456789
//如果条件不匹配一个记录,希望能往数据库里新增一个,设置update函数第三个参数为true就可以。这里age为8条件匹配不到数据。
db.testCollection.update({age: 8}, {$set: {password : '888888'}}, true)
//若要批量更新,设置update函数第四个参数为true就可以了。
db.testCollection.update({age: 7}, {$set: {password : '456789'}}, true, true)
更新version为3.5的记录的segment值。
查询一条纪录。
db.storeCollection.findOne({'version':'3.5'})
参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)。
查询多条记录。
db.storeCollection.find()
使用find()函数,参数指定查询条件,不指定条件则查询全部记录。
条件查询包括4种方法:
// 1. $gt(>)、$gte(>=)、$lt(<)、$lt(<=)、$ne(!=)、没有特殊关键字(=)
db.testCollection.find({age: {$$gt:5}}).count() //14。note:去掉gt前面一个$符号,$符号会被解析,wiznote搞的鬼!!!
db.testCollection.find({age: {$gte:5}}).count() //28
db.testCollection.find({age: {$lt:5}}).count() //71
db.testCollection.find({age: {$lte:5}}).count() //85
db.testCollection.find({age: {$ne:5}}).count() //85
db.testCollection.find({age: 5}).count() //14
// 2. 没有特殊关键字(&&)、 $or(||)、$in()、$nin()
db.testCollection.find({age: {$$gt: 5}, password:'123456'}).count() //年龄大于5且密码为123456, 14。
//年龄为5或者名字为name26,18
db.testCollection.find({$or:[{age: 5}, {name:'name26'}]}).count()
db.testCollection.find({age: {$in: [1,5, 6]}}).count() //年龄在1、5、6中,43。
db.testCollection.find({age: {$nin: [1,5, 6]}}).count() //年龄不在1、5、6中,56
// 3. 正则表达式匹配,威力强劲
db.testCollection.find({name: /^name1\d/}).count() //名字以name1开头的,从name10到name19的记录。41
//4. where语句,大招来了
db.testCollection.find({$where:function(){return this.age > 5} }).count()
删除纪录
db.storeCollection.findOne({'version': '3.5'}) (删除version为3.5的纪录)
db.storeCollection.findOne({'version': '3.5'}) (返回结果为空)
统计集合记录数
db.storeCollection.count()
查询并统计结果记录数
db.storeCollection.find({'segment':'e30l8'}).count()