mongodb相关

作者: love_program | 来源:发表于2018-06-27 15:57 被阅读15次

常见命令

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})

    1. collection_name 集合的名字
    2. queryWhere 参阅查询条件操作符
    3. key 指定要返回的列
    4. 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

相关文章

网友评论

    本文标题:mongodb相关

    本文链接:https://www.haomeiwen.com/subject/flnmyftx.html