mongodb学习(二)——基本的数据操作
数据操作(重点)
数据库的核心——CRUD,增加和删除较为简单,查询和修改较复杂
查询
关系运算符
$gt 大于
$lt 小于
$gte 大于等于
$lte 小于等于
$eq | (key: value) 等于
$ne 不等于
先往数据库中添加一些数据
db.students.insert({'name':'张三','sex':'男','age':19,'score': 89,'address': '海淀区'})
db.students.insert({'name':'李四','sex':'女','age':20,'score': 100,'address': '朝阳区'})
db.students.insert({'name':'王五','sex':'男','age':22,'score': 50,'address': '西城区'})
db.students.insert({'name':'赵六','sex':'女','age':21,'score': 60,'address': '东城区'})
db.students.insert({'name':'孙七','sex':'男','age':19,'score': 70,'address': '海淀区'})
db.students.insert({'name':'王八','sex':'女','age':23,'score': 90,'address': '海淀区'})
db.students.insert({'name':'刘九','sex':'女','age':35,'score': 56,'address': '朝阳区'})
db.students.insert({'name':'钱十','sex':'男','age':27,'score': 89,'address': '海淀区'})
exp:
查询姓名是张三的学生信息
db.students.find({name:’张三’}).pretty()
查询性别是男的学生信息
db.students.find({sex:’男’}).pretty()
查询年龄大于19岁的学生
db.students.find({age:{$gt:19}}).pretty()
查询成绩大于等于60分的学生
db.students.find({score:{$gte:60}}).pretty()
查询姓名不是王五的信息
db.students.find({name:{$ne:’王五’}}).pretty()
逻辑运算符
$and
与$or
或$not | $nor
非
exp:
查询年龄在19 ~ 22岁的学生信息
db.students.find({age:{$gte:19,$lte:22}}).pretty()
逻辑运算中与连接是最容易的,只需要利用,
分割多个条件即可
查询年龄小于20岁,或者成绩大于90分的学生信息
db.students.find(
{$or:
[
{age:{$lt:20}},
{score:{$gt:90}}
]
}).pretty()
查询年龄大于等于20岁,且成绩小于等于90分的学生信息
db.students.find(
{$and:
[
{age:{$gte:20}},
{score:{$lte:90}}
]
}).pretty()
查询年龄小于20岁的学生信息
db.students.find({age:{$lt:20}}).pretty()
db.students.find({age:{$not:{$gte:20}}}).pretty()
取模
$mod:[除数,余数]
exp: 查询年龄除以20余1的学生信息
db.students.find({age:{$mod:[20,1]}}).pretty()
范围查询
$in: 在范围之中
$nin: 不在范围之中
exp:
查询姓名是”张三“、”李四、”王五“的学生
db.students.find({name: {$in:['张三','李四','王五']}}).pret ty()
查询姓名不是”张三“、”李四、”王五“的学生
db.students.find({name: {$nin:['张三','李四','王五']}}).pretty()
数组查询
$all
$size
$slice
$elemMatch
首先在数据库中新增一些数据
db.students.insert({name:'a',sex:'男',age:19,score:89,address:'海淀区',course:['语文','数学','英语','音乐','政治']})
db.students.insert({name:'b',sex:'男',age:19,score:89,address:'海淀区',course:['语文','数学']})
db.students.insert({name:'c',sex:'男',age:19,score:89,address:'海淀区',course:['语文','数学','英语']})
db.students.insert({name:'d',sex:'男',age:19,score:89,address:'海淀区',course:['英语','音乐','政治']})
db.students.insert({name:'e',sex:'男',age:19,score:89,address:'海淀区',course:['语文','政治']})
$all
: 表示全都包括,用法:
{$all:[内容1,内容2]}
exp:
查询同时参加语文和数学的学生
db.students.find({course:{$all:['语文','数学']}}).pretty()
数组的操作,可以利用索引,使用key.index
的方式来定义索引
查询数组中第二个内容是数学的学生(sh)
db.students.find({'course.1':'数学'}).pretty()
$size
: 控制数组元素数量
exp:
查询只有两门课程的学生
db.students.find({course:{$size: 2}}).pretty()
$slice
: 控制查询结果的返回数量
exp:
查询年龄是19岁的学生,要求之显示两门参加的课程
db.students.find({age:19},{course:{$slice:2}}).pretty()
此时查询返回的是前两门课程,可以设置参数来取出想要的内容
$slice:-2 //后两门
$slice: [1,2] // 第一个参数表示跳过的数据量,第二个参数表示返回的数据量
嵌套集合运算
对象里面套对象
在数据库中新增数据
db.students.insert(
{
name:'A',sex:'男',age:19,score:89,address:'海淀区',
course:['语文','数学','英语','音乐','政治'],
parents:[
{name:'A(father)',age:50,job:'工人'},
{name:'A(mother)',age:50,job:'职员'}
]
})
db.students.insert(
{
name:'B',sex:'男',age:19,score:89,address:'海淀区',
course:['语文','数学'],
parents:[
{name:'B(father)',age:50,job:'处长'},
{name:'B(mother)',age:50,job:'局长'}
]
})
db.students.insert(
{
name:'C',sex:'男',age:19,score:89,address:'海淀区',
course:['语文','数学','英语'],
parents:[
{name:'C(father)',age:50,job:'工人'},
{name:'C(mother)',age:50,job:'局长'}
]
})
对于嵌套的集合中数据的判断只能通过$elemMatch
完成
语法:{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
exp:
查询父母中有人是局长的信息
db.students.find({parents: {$elemMatch: {job: '局长'}}}).pretty()
判断某个字段是否存在
{$exists:flag}
flag为true表示存在,false表示不存在
exp:
查询具有parents成员的学生
db.students.find({parents:{$exists: true}}).pretty()
查询不具有course成员的学生
db.students.find({course: {$exists: false}}).pretty()
排序
sort({ field: value })
value是1表示升序,-1表示降序
exp:
学生信息按照分数降序排列
db.students.find().sort({score:-1}).pretty()
分页显示
skip(n)
: 跳过n条数据
limit(n)
: 返回n条数据
exp:
分页显示,第一页,每页显示5条数据
db.students.find({}).skip(0).limit(5).pretty()
分页显示,第二页,每页显示5条数据
db.students.find({}).skip(5).limit(5).pretty()
数据修改 | 更新
updateOne()
修改匹配的第一条数据
updateMany()
修改所有匹配的数据
格式:updateOne(<filter>,<update>)
修改器
$inc
: 操作数字字段的数据内容
语法: {"$inc" : {成员 : 内容}}
exp:
将所有年龄为19岁的学生成绩一律减少30分,年龄增加1
db.students.updateMany({age:19},{$inc:{score:-30,age:1}})
$set
: 更新内容
语法:{$set: :{属性: 新内容}}
exp:
将20岁学生的成绩修改为89
db.students.updateMany({age: 20},{$set: {score: 89}})
$unset
: 删除某个属性及其内容
语法:{$unset: {属性: 1}}
exp:
删除张三的年龄和成绩信息
db.students.updateOne({name:'张三'},{$unset: {age: 1,score: 1}})
$push
: 向数组中添加数据
语法:{$push: {属性: value}}
exp:
在李四的课程中添加语文
db.students.updateOne({name: '李四'},{$push: {course: '语文'}})
如果需要向数组中添加多个数据,则需要用到$each
exp:
在李四的课程中添加数学、英语
db.students.updateOne(
{name:'李四'},
{$push:
{
course:{$each: ['数学','英语']}
}
}
)
$addToSet
: 向数组里面添加一个新的数据
与$push
的区别,$push
添加的数据可能是重复的,$addToSet
只有这个数据不存在时才会添加(去重)
语法:{$addToSet: {属性:value}}
exp:
王五新增一门舞蹈课程
db.students.updateOne(
{name:'王五'},
{$addToSet: {course:'舞蹈'}}
)
$pop
: 删除数组内的数据
语法:{$pop: {field: value}}
,value为-1表示删除第一个,value为1表示删除最后一个
exp:
删除王五的第一个课程
db.students.updateOne({name:'王五'},{$pop:{course:-1}})
只是删除属性的内容,属性还在
$pull
: 从数组中删除一个指定内容的数据
语法:{$pull: {field:value}}
进行数据比对,如果是该数据则删除
exp:
删除李四的语文课程
db.students.updateOne({name: '李四'},{$pull:{course:'语文'}})
$pullAll
: 一次删除多个数据
语法:{$pullAll:{field:[value1,value2...]}}
exp:
删除a的语文数学英语课程
db.students.updateOne({name:'a'},{$pullAll:{course:['语文','数学','英语']}})
$rename
: 属性重命名
语法: {$rename: {旧属性名:新属性名}}
exp:
把张三的name属性名改为姓名
db.students.updateOne({name:'张三'},{$rename:{name:'姓名'}})
mongodb学习(二)——基本的数据操作的更多相关文章
- MongoDB学习(三)数据导入导出及备份恢复
这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...
- MongoDB学习比较-07 C#驱动操作MongoDB
下载驱动 驱动的下载有两种方式:一种是在C#项目中通过NuGet进行安装,另一种是通过下面的链接:https://github.com/mongodb/mongo-csharp-driver/rele ...
- mongodb学习(二)
昨天给ubuntu13.04安装ati的显卡驱动,ubuntu本来对ati的显卡支持不是很好,没办法unity启动器没有了,ccsm也没有任何作用,只得重新安装了12.10,近期也不打算升级13.04 ...
- ballerina 学习二十九 数据库操作
ballerina 数据操作也是比较方便的,官方也我们提供了数据操作的抽象,但是我们还是依赖数据库驱动的. 数据库驱动还是jdbc模式的 项目准备 项目结构 ├── mysql_demo │ ├── ...
- MongoDB学习【四】—pymongo操作mongodb数据库
一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...
- MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示
回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...
- mongodb 学习二
基本操作 增删改查实一个数据库必备的操作,接下来我们就说说怎么在shell下进行增删改查. 我们另外打开一个"命令指示符"窗口(注意:之前的不能关闭),输入mongo打开Mongo ...
- mongodb学习之:文档操作
在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...
- Mongodb for PHP教程之数据操作
Mongodb的常用操作 参看手册,php官方的http://us2.php.net/manual/en/mongo.manual.php 也可以参看mongodb官方的教程 数据库连接 ⑴默认格式 ...
- mongodb学习(二)分级查询数组中的值
(PS: 标题有点不妥当...) 大概是这样...数据结构如下: 需要模糊查询title的值... mongodb中操作语句: 主要是注意这里urlElements不需要加[0]...我开始的时候写成 ...
随机推荐
- 2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承
title author date CreateTime categories WPF Frame 的 DataContext 不能被 Page 继承 lindexi 2018-06-11 10:48 ...
- iptables [match] 常用封包匹配参数
参数 -p, --protocol 范例 iptables -A INPUT -p tcp 说明 匹配通讯协议类型是否相符,可以使用 ! 运算符进行反向匹配,例如: -p !tcp 意思是指除 tcp ...
- Python--day24--继承面试题
输出:(打印的是Dog.func而不是Animal.func) __init__方法如果本生的类具有的话,父类的__init__方法就不在调用,没有才调用父类的__init__方法 派生属性: 如果既 ...
- laravel post提交数据时显示异常
post提交数据时候显示如下: The page has expired due to inactivity. Please refresh and try again 这是由于在laravel框架中 ...
- Linux创建用户、设置密码、修改用户、删除用户命令
与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. useradd testuser 创建用户testuserpasswd testuser 给已创建的用 ...
- 【React】富文本编辑器 清空文本内容 获取HTML
富文本编辑器 React 传入 import React,{Component } from 'react'; import { Card, Button, Table, Form, Select ...
- Wannafly挑战赛15 C“出队”(约瑟夫环类问题)
传送门 •参考资料 [1]:浅梦无痕 [2]:Esquecer [3]:My CSDN •题意 n 个人围成一圈,1,2 报数,报 1 的离队,求编号为 x 的第几次出队: •对博文[1]的理解 第一 ...
- C# 使用反射获取私有属性的方法
本文告诉大家多个不同的方法使用反射获得私有属性,最后通过测试性能发现所有的方法的性能都差不多 在开始之前先添加一个测试的类 public class Foo { private string F { ...
- codeforces 1136E 线段树
codeforces 1136E: 题意:给你一个长度为n的序列a和长度为n-1的序列k,序列a在任何时候都满足如下性质,a[i+1]>=ai+ki,如果更新后a[i+1]<ai+ki了, ...
- MyBatis 注解开发+逆向(Generator)
注解开发 最初设计时,MyBatis 是一个 XML 驱动的框架.配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的.随着技术的更新发展,对于开发效率要求也原来越高,特别是一些小型项目; ...