mongo常用操作
来源:互联网 发布:java过滤器工作原理 编辑:程序博客网 时间:2024/06/10 05:51
mogodb1、brew install mongodb2、启动mongo服务 mongod -config /usr/local/etc/mongod.conf3、/usr/local/etc/mongod.conf :所有数据保存的位置、日志信息都在此文件中、端开口号配置等都在这里记录 systemLog: destination: file path: /usr/local/var/log/mongodb/mongo.log #保存日志位置 logAppend: true #打开日志输出操作 storage: dbPath: /usr/local/var/mongodb #数据库保存数据的位置 net: bindIp: 127.0.0.1 #绑定的ip4、切换到admin数据库:use admin 关闭当前终端:db.shutdownServer()5、基础操作 5.1 创建数据库 :use mldn #不会创建数据库,当添加数据时候回自动创建数据库 显示数据库:show databases #mldn不存在此时 5.2 创建集合:db.createCollection('emp') #这个时候添加集合的同时,创建了数据库mldn ,集合就是传统sql的表 显示数据库:show databases #发现存在mldn 5.3 向一个不存在的集合中插入数据:db.dept.insert({"deptno":10,"dename":"财务部","loc":"北京"})#这时候集合不存在,插入数据时候会自动创建集合 查看所有集合:show collections 插入不规则数据 var deptData = { "deptno":20, "dename":"研发部", "loc":"上海", "count":20, "avg":8000.0 }; db.dept.insert(deptData) ; db.dept.insert({"deptno":30,"dename":"市场部"}) 【注意】:此时数据可以由用户随意指定,不用考虑同一个集合中其他数据的结构,所以在mongo中没有查看集合结构的命令,因为每一条数据可能结构都不同 5.4 查询集合数据: db.dept.find() #查看集合中所有信息 db.dept.findOne()#查看集合中一条信息 5.5 关于ID:"_id" : ObjectId("59ad52c3c53ac106b3c4b1cb") #时间戳+机器码+PID+计数器,绝对唯一 5.6 删除数据 db.dept.remove({"_id" : ObjectId("59ad52c3c53ac106b3c4b1cb")}) #删除一条数据 5.7 更新数据 var deptData = { "deptno":20, "dename":"乞讨部", "loc":"家里蹲", "count":20, "avg":8000.0 }; db.dept.update({"_id" : ObjectId("59ad5469c53ac106b3c4b1cc")},deptData); #前面的是条件,后面的是更新的数据 5.8 删除集合: db.dept.drop() 5.9 删除数据库: db.dropDatabase() #在哪个数据库下就删除哪个数据库6、数据增加:db.集合.insert() 6.1 db.infos.insert({"url":"www.baidu.com"}) #插入一条数据 6.2 db.infos.insert([{"url":"www.qq.com"},{"url":"www.taobao.com"}]) #插入多条数据 6.3 保存10000条数据,与javascript语法差不多 for(var i = 0 ; i< 10000;i++){ db.infos.insert({"url":"mldn-"+i}) } 在此查询会显示20条默认,然后下方显示“Type "it" for more”,意思是输入it就显示下一页,it回车7、数据查询:db.集合.find({查询条件},[,{设置显示的字段}]) 7.1 :db.infos.find() 7.2 :db.infos.find({"url":"www.baidu.com"}) #查询url为www.baidu.com 7.3 :db.infos.find({"url":"www.baidu.com"},{"_id":0}) #设置为0 的不显示在查询结果集中,设置为1显示,不设置默认为1 7.4 :db.infos.find({"url":"www.baidu.com"},{"_id":0}).pretty() #漂亮显示,格式化,列多的时候比较好看8、关系运算(大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、等于(key:val、$eq)、不等于($ne)) 准备测试数据: db.students.insert({"name":"张三","sex":"男","age":19,"score":89,"address":"海淀区"}) db.students.insert({"name":"李四","sex":"女","age":20,"score":59,"address":"朝阳区"}) db.students.insert({"name":"王五","sex":"女","age":19,"score":99,"address":"西城区"}) db.students.insert({"name":"赵六","sex":"男","age":20,"score":100,"address":"东城区"}) db.students.insert({"name":"小七","sex":"男","age":19,"score":20,"address":"海淀区"}) db.students.insert({"name":"王八","sex":"女","age":21,"score":0,"address":"海淀区"}) db.students.insert({"name":"刘九","sex":"男","age":19,"score":70,"address":"朝阳区"}) db.students.insert({"name":"钱十","sex":"女","age":21,"score":56,"address":"西城区"}) 8.1 (等于)查询姓名 “张三” db.students.find({"name":"张三"}) 8.2 (大于)查询年龄大于19岁的 db.students.find({"age":{"$gt":19}}) 8.3 (大于等于) 查询成绩大于等于60分的 db.students.find({"score":{"$gte":60}}) 8.4 (不等于) 查询姓名不是“王五” db.students.find({"name":{"$ne":"王五"}})9、逻辑运算(与("$and")、或("$or")、非("$not"、"$nor")) 9.1 (与) 查询大于等于19并且小于等于20的人 db.students.find({"age":{"$gte":19,"$lte":20}}) 9.2 (非) 查询年龄不是19岁的人 db.students.find({"age":{"$ne":19}}) 9.3 (或)年龄大于19岁,或者成绩大于90分的学生 db.students.find({ "$or":[ {"age":{"$gte":19}}, {"score":{"$gte":90}} ] }) 9.3($nor)年龄不大于19或者成绩不大于90 db.students.find({ "$or":[ {"age":{"$gte":19}}, {"score":{"$gte":90}} ] })10、求模($mod):{"$mod":[数字,余数]} db.students.find({"age":{"$mod":[20,0]}}) #结果是20,余数是0 db.students.find({"age":{"$mod":[20,1]}}) #结果是20,余数是111 、范围查询($in:在范围之中,$nin:不在范围之中) db.students.find({"name":{"$in":['张三','李四','王五']}}) db.students.find({"name":{"$nin":['张三','李四','王五']}})12、数组查询(mongo支持数组保存) 先保存一部分数组数据: db.students.insert({"name":"谷大神 - A","sex":"女","age":19,"score":80,"address":"西城区","course":['语文','数学','英语']}) db.students.insert({"name":"谷大神 - B","sex":"女","age":28,"score":56,"address":"东城区","course":['体育','数学','英语']}) db.students.insert({"name":"谷大神 - C","sex":"男","age":21,"score":71,"address":"朝阳区","course":['语文','美术','英语']}) db.students.insert({"name":"谷大神 - D","sex":"女","age":24,"score":62,"address":"西城区","course":['计算机','数学','英语']}) 12.1 针对数组判断运算符($all,$size,$slice,$elemMatch) $all:查询同时参加”语文“和”数学“的学生 #{"$all":["内容1","内容2",..]} db.students.find({"course":{"$all":["语文","数学"]}}) 数组索引:查询课程(下标从0开始)第二个内容为数学的信息 db.students.find({"course.1":"数学"}) $size :查询3报了三个课程的学生 db.students.find({"course":{"$size":2}}) $slice:返回年龄是19岁信息,但是要求只显示参加的前2门课程 db.students.find({"age":19},{"course":{"$slice":2}}) #取出course前2门信息 db.students.find({"age":19},{"course":{"$slice":2}}) #取出course后2门信息 db.students.find({"age":19},{"course":{"$slice":[1,2]}}) #跳过1个返回2个13、嵌套集合运算:$elemMatch 先保存一部分数组数据: db.students.insert({"name":"吕大神 - A","parents":[{"name":"A父亲","job":"工人"},{"name":"A母亲","job":"职员"}]}) db.students.insert({"name":"吕大神 - B","parents":[{"name":"B父亲","job":"医生"},{"name":"B母亲","job":"教师"}]}) db.students.insert({"name":"吕大神 - C","parents":[{"name":"C父亲","job":"局长"},{"name":"C母亲","job":"医生"}]}) db.students.insert({"name":"吕大神 - D","parents":[{"name":"D父亲","job":"工人"},{"name":"D母亲","job":"局长"}]}) 13.1 查询 ”吕大神 - A","吕大神 - B","吕大神 - C“ 三个同学的父母是医生的 db.students.find({"$and":[ {"name":{"$in":["吕大神 - A","吕大神 - B","吕大神 - C"]}}, {"parents":{"$elemMatch":{"job":"医生"}}} ]}) 【注】:尽量不要讲数据构造成这样,太麻烦14、判断字段是否存在 :$exists 14.1 查询带有parents成员的数据 db.students.find({"parents":{"$exists":true}}) 14.2 查询不具有course成员的数据 db.students.find({"course":{"$exists":false}}) 【注】:尽量保存时间结构一致15、条件过滤:$where 15.1 单个条件 db.students.find({"$where":"this.age > 20"}) #加了this会一条条去查询过滤 db.students.find("this.age > 20") #加了this会一条条去查询过滤 db.students.find(function(){ return this.age > 20 }) db.students.find({"$where":function(){ return this.age > 20 }}) #这里要注意,加上$where,外面要多些一个{} 【注】:以上三个结果是一致的,所以对于$where是可以简化的,但是对于数据量比较大的不推荐使用,严格来讲是编写一个操作的函数一个一个去过滤 15.2 多个条件: 查询大于19小于21的人 db.students.find({"$and":[ {"$where":"this.age > 19"}, {"$where":"this.age < 21"}, ]}) 【注】$where能利用javascript进行查询,但是把bson重新变成javascript循环验证,无法再利用到索引,效率低,再整个mongo中索引提升非常明显16、正则运算、模糊查询:如果想实现模糊查询,必须使用正则表达式,使用的是Perl兼容的正则表达形式 16.1 语法 基础语法:{key : 正则标记} 完整语法:{key:{"$regex":正则标记,"$options":选项}} options: i:忽略大小写 (最常用) m:多行查找 x:空白字符除了呗转移或在字符类中意外的完全被忽略 s:匹配所有的字符(圆点”.“)包括换行内容 如果直接使用(javascript),那么只能使用i与m(常用),而s与x必须使用$regex(基本用不到) 16.2 查询name上包含”谷“的人 db.students.find({"name":/谷/) #这里要注意 /谷/ 不能加”“ db.students.find({"name":/a/i) #name包含字母A、a,i:不区分大小写 db.students.find({"name":{"$regex":/a/}}) #与上面一致、写法不同 16.3 正则查询数组数据 db.students.find({"course":/语/}) #查询课程中带“语”的 db.students.find({"course":/语?/}) # ”?:是占位符,只能写后面不能写前面,与传统正则不同17、数据排序(升序:1 、降序:-1) 17.1 根据成绩降续 : db.students.find().sort({"score":-1}) 17.2 自然排序(按照保存进去的顺序倒叙) :db.students.find().sort({"$natural":-1}) 18、数据分页 skip(n):相当于sql中的offset,跳过多少个 limit(n) 18.1 根据age降续分页 db.students.find().skip(0).limit(5).sort({"age":-1})19、数据更新(更新函数):save、update 19.1 update语法:db.集合.update(条件,更新的数据,upsert,multi) upsert:更新的数据不存在,则新加一条,true为增加,false不增加 multi:表示是否只更新到查询出来的第一条数据,false只更新第一个,true全部更新 eg:将年龄是19岁的人成绩都更新到100分(会返回多条数据) 只更新第一条数据:db.students.update({"age":19},{"$set":{"score":100},false,false}) 更新所有:db.students.update({"age":19},{"$set":{"score":100},false,true}) 不存在插入:db.students.update({"age":190},{"$set":{"score":100}},true,false) $set:修改器,不止能改数据,还能改集合等 19.2 save:db.集合.save({条件,更新数据}) 修改存在的数据:db.students.save({"age":190,score:0}) 修改不存在的数据:db.students.save({"age":191,score:0}) #数据不存在,默认就添加一条 【注】:多用update灵活20、修改器 20.1 $inc : 主要针对于一个数字字段,增加数字字段的内容 语法 :{"$inc":{"成员":"内容"}} 例子:将所有19岁人成绩减少30分、年龄+1岁 db.students.update({"age":19},{"$inc":{"score": -30,age : +1}})
阅读全文
0 0
- mongo常用操作
- mongo的常用操作
- mongo的常用操作
- Mongo DB 常用操作
- mongo常用的操作
- mongo常用操作
- Mongo常用操作汇总
- mongo的常用操作(转载)
- Mongo For Java常用操作
- mongo常用的操作 有点乱
- mongo操作
- Mongo操作
- mongo操作
- MongoDB mongo shell,常用的操作命令,GUI客户端
- MongoDB的mongo shell常用操作方法及操作脚本笔记
- mongo 常用的命令
- mongo 常用的命令
- mongo 常用的命令
- 图形学数学基础之1D采样分布计算方法Inverse Method
- 消息队列使用场景
- 线程工具类
- 写给前端工程师的理论基础(3)--websocket这一篇就够了
- java 图形用户界面 之 文本处理 的介绍及示例程序
- mongo常用操作
- Toast抽取
- 文件上传的几种验证方式【萌新】
- Java_IO_1_File类
- PCA的一些理解
- jquery uploadify插件多文件上传
- 说说STEAM
- usaco Training Cow Tours
- 《程序员的自我修养--链接、装载与库》笔记--第二章 编译和链接