mongodb相关
常见命令
show dbs //显示有哪些数据库
use test //使用某个数据库,如果已经有了该数据库会切换到该数据库;如果没有会创建该数据库,创建数据的时候,只有往数据库里面插入值的时候,通过show dbs 才会看见真正创建该数据库
db.createCollection('tests')//创建一个集合
db.test2.insert({"name":"hello"})//往集合中插入数据,也会自动创建集合
db //查看当前是哪个数据库
use test && db.dropDatabase() //删除数据库
show tables //显示有哪些集合
db.test.drop() //删除数据库里面的集合
db.test.insert()//往集合里面插入文档 (增)
db.test1.remove({"name":111})//删除集合里面的文档 删)
b.test1.update({name:1}, {$set:{age:3}})//修改集合里面的文档 (改)
db.test.find()//查询集合里面的文档 (查)
db.test1.count()// 返回集合里面的文档的条数
/////////////////////// 增加相关操作 //////////////////////////////////
db.test1.insert({name:1,age:2}) //往test1集合里面添加一条数据
db.test1.insert([{name:1},{age:2}, {name:1,age:2}]) //批量插入多条数据
//insert.js
var db = connect('test');
for(var i=0; i<1000; i++) {
db.test1.insert({name:'mzr', age:i});
}
//进入到mongo客户端,执行load('./insert.js') 插入多条数据,只是模拟,这种情况插入多条数据不建议
////////////////////// 删除相关操作 //////////////////////////////////
db.test1.remove({}) //删除test1集合里面所有的数据
////////////////////// 更新相关操作 /////////////////////////////////
db.test1.update({name:1},{$inc:{age:2}}) //找出name是1的,并且更新age+2
db.test1.update({name:1}, {$push:{hobby:"1111"}}) //往数组里面添加一条数据: 更新name为1的,并且往hobby字段里面push一条数据
db.test1.update({name:1}, {$addToSet: {hobby:'1111'}}) // 往数组里面添加一条不重复的数据:更新name为1的,并且往hobby字段里面添加一条数据,如果有了,就不会再添加
db.test1.update({name:1}, {$addToSet: {hobby:{$each:[1,2,3,4]}}})//往数组里面添加多条不重复的数据: 更新name为1的,并且往hobby字段里面添加数据,怎么添加呢,遍历添加多条数据
db.test1.update({name:1}, {$pop:{hobby:1}}) //删除hobby数组里面的最后一个元素
db.test1.update({name:1}, {$set:{"hobby.4":"你好啊"}})//将hobby数组里面的索引为4的元素改了
//以脚本的形式运行
var modify = {
//要操作的集合
findAndModify: 'test1',
//指定查询条件
query: {name: 4}
//指定如何更新,把年龄加100
update: {$set :{age: 100}}
//指定返回的字段
fields: { age: true, _id: false }
//表示按age字段进行正序排列
sort:{age:1},
//new为true,返回更新后的文档
new: true
}
var db = connect('test');
var result = db. runCommand(modify);//可以返回更新后的文档
printjson(result)
////////////////////// 查询相关操作 /////////////////////////////////
db.test1.find({},{name:1,_id:0}) //只需要name字段,排序_id字段
db.test1.find({'_id':{"$lt":ObjectId("5b334f96c3061fed28b54b14")}}).sort({"_id":-1}).limit(1)//查询某
常见运算符
$set //设置值更新某个值
$unset //删除某个字段
$gt //表示大于
$lt //表示小于
$gte //表示大于等于
$lte //表示小于等于
$inc //表示增加 //increment简写
$push //往数据里面追加一条数据
$ne //不等于
$addToSet //如果原来有数据了就不会再添加了
查询相关操作(1分插入,9分查询)
-
通过id进行查询
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表示不显示
-
查询匹配结果的第一条数据,当找到符合条件的就不会往下继续遍历查找,效率高
db.collection_name.findOne()
eg:db.test1.findOne({},{age:1, name:1,_id:0})
-
$in 查询符合某几个值的记录(枚举)
db.test1.find({age:{$in:[3,2]}}, {name:1,age:1, _id:0})
// 查询age为3和2的 -
$nin 查询不符合某几个值的记录
db.test1.find({age:{$nin:[3,2]}}, {name:1,age:1, _id:0})
//查询age不是2和3的 -
查询某个范围之间的记录(不包前,也不包后)
db.test1.find({age:{$gt:2, $lt:7}})
//查询age>2并且age<7的 -
查询某个范围之间的记录(包前也包后)
db.test1.find({age:{$gte:2, $lte:7}})
//查询age>=2并且age<=7的 -
查询不在某个范围之类的记录 db.test1.find({name:{$not:{$gt:2, $lt:7}}}) //查询age<2或者age>7的
-
$where 查询单边范围的数据
db.test1.find({$where:"this.age>4"})
//查询age>4的数据
db.test1.find({$where:"this.age>4&& this.age<8"})
//查询age大于4的,并且age小于8的 -
查询喜欢某个爱好的记录
> db.test1.find() //查询当前集合中的所有的记录 { "_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']}}) //查询既喜欢抽烟又喜欢喝酒的记录,且的关系 { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$in:['smoking', 'drinking']}}) //查询喜欢抽烟或者喝酒的,或的关系 { "_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}}) //查询有两个爱好的人 { "_id" : ObjectId("5b34a165d70d23f4a9907fb9"), "name" : 2, "hobby" : [ "smoking", "drinking" ] } > db.test1.find({hobby:{$size:2}}, {hobby:{$slice:1}, _id:0}) //查询有两个爱好的,并且hobby字段只要里面的第一个数据; $slice:2,截取前两个 { "name" : 2, "hobby" : [ "smoking" ] } { "name" : 3, "hobby" : [ "smoking" ] }
-
正则查询
db.collection.find({key:/value/})
eg:db.collection.find({key:/age/})
-
大于符号查询
db.collectoin_name.find({<key>:{$gt:<value>}})
eg:db.students.find({age:{$gt:30}})
-
大于等于符号查询
db.collectoin_name.find({<key>:{$gte:<value>}})
eg:db.students.find({age: {$gte: 30}})
-
小于符号查询
db.collectoin_name.find( {<key>:{$lt:<value>}})
eg:db.students.find({age: {$lt: 30}})
查询age 小于30的数据 -
小于等于符号查询
db.collectoin_name.find({<key>:{$lte:<value>}})
eg:db.students.find({age: {$lte: 30}})
-
同时使用 $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进行查询 使用_id进行查询
db.collectoin_name.find({"_id" : ObjectId("value")})
eg:db.students.find({_id:ObjectId("5adb666ecd738e9771638985")})
-
查询结果集的条数
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联用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 的数据 -
limit 分页查询
db.collectoin_name.find().limit(number)
eg:db.students.find().limit(3)
-
skip跳过指定数量查询
db.collectoin_name.find().skip(number)
eg:db.students.find().skip(3)
-
skip+limit实现分页功能
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})
通过配置项启动数据库
- 新建配置文件mongod.conf
datapath=/data/mongodb/data //存放数据的目录 logpath=/data/mongodb/log //存放日子的目录 port=5000 //开启的端口号 fork=true //在后台运行 auth=true //以安全方式启动数据库,默认不验证
- 启动服务器
mongod --config mongod.conf
- 启动客户端
mongo --port 5000