以下都是基于MongoShell进行操作

1.使用insert进行插入操作

 示例:

db.<集合>.insertOne(<JSON对象>)
db.<集合>.insertMany([<JSON1>,<JSON2>,...<JSON n>]) 例如:
db.fruit.insertOne({name:"apple"})
db.fruit.insertMany([
{name:"apple"},
{name:"pear"},
{name:"orange"}
])

2.使用find查询文档

 2.1 关于find

   2.1.1 find是MongoDB中查询数据的基本指令,相当于SQL中的SELECT

   2.1.2 find返回的是游标

 2.2 示例

db.movie.find({"year":1975})  //单条件查询
db.movie.find({"year":1976,"title":"Batman"}) //多条件and查询
db.movie.find({$and:[{"title":"Batman"},{"category":"action"}]}) //and的另一种形式
db.movie.find({$or:[{"year":1989,{"title":"Batman"}}]}) //多条件or查询
db.movie.find({"title":/^B/}) //按正则表达式查找 B开头的

  SQL和MQL查询对照表

SQL MQL
a == 1 { a: 1 }
a 1 { a: {$ne:1 } }
a > 1 { a: {$gt: 1} }
a >= 1 { a: {$gte: 1} }
a { a: {$lt: 1} }
a { a: {$lte: 1} }
a = 1 and b = 1 { a: 1,b: 1 } 或 { $and: {a: 1},{b: 1} }
a = 1 or b = 1 { $or: [{a: 1},{b: 1}]} }
a is null { a: {$exists: false} }
a in (1,2,3) { a: {$in:[1,2,3]} }
SQL MQL
$lt 存在并小于
$lte 存在并小于等于
$gt 存在并大于
$gte 存在并大于等于
$ne 不存在或存在但不等于
$in 存在并在指定数组中
$nin 不存在或不在指定数组中
$or 匹配两个或多个条件中的一个
$and 匹配全部条件

 2.3 使用find搜索子文档

  2.3.1 支持"field.sub_field"的形式查询子文档

假设有如下数据
db.fruit.insertOne({
"name":"apple",
"from":{
country:"China",
province:"Beijing"
}
}) db.fruit.find({"from.country":"China"}) //查询from下counrty是China的文档 db.fruit.find({"from":{country:"China"}}) //错误写法

3.使用remove删除文档

  • remove命令需要配合查询条件使用
  • 匹配到查询条件的文档会被删除
  • 指定一个空文档条件会删除所有文档

  3.1 示例

db.movie.remove({a:1})  //删除a等于1的记录
db.movie.remove({a:{$lt:5}}) //删除a小于5的记录
db.movie.remove({}) //删除所有记录
db.movie.remove() //会报错

4.使用update更新文档

  4.1 示例

db.<集合>.update(<查询条件>,<更新字段>)

db.fruit.updateOne({name:"apple"},{$set,{name:"banana"}}) //将name为apple的记录更新为banana
db.fruit.updateOne({name:"apple"},{$set,{from:"China"}}) //将name为apple的记录的from字段更新为China,如果没有这个字段则会新增上
  • 使用updateOne表示无论条件匹配了多少记录,始终只更新第一条
  • 使用updateMany表示条件匹配多少条就更新多少条
  • updateOne/updateMany方法要求更新条件部分必须有以下之一,否则会报错
    • $set/$unset
    • $push/$pushAll/$pop
    • $pull/$pullAll
    • $addToSet
$push 增加一个对象到数组底部
$pushAll 增加多个对象到数组底部
$pop 从数组底部删除一个对象
$pull 如果匹配指定的值,从数组中删除相对应的对象
$pullAll 如果匹配任意的值,从数据中删除对应的对象
$addToSet 如果不存在则增加一个值到数组

4.使用drop删除集合

  • 使用 db.<集合>.drop()来删除一个集合
  • 集合中的全部文档都会被删除
  • 集合相关的索引也会被删除

5.使用dropDatabase删除数据库

  • 使用db.dropDatabase()来删除数据库
  • 数据库相应的文件会被删除,磁盘空间将被释放

MongoDB学习2:MongoDB的基本操作的更多相关文章

  1. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  2. [MongoDB]学习笔记--基本操作

    读取 db.collection.find() db.users.find( { age: {$gt: }}, {name: , address: } ).limit().sort({age:1}) ...

  3. MongoDB学习笔记~MongoDB实体中的值对象

    回到目录 注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也 ...

  4. MongoDB学习笔记——MongoDB 连接配置

    MongoDB连接标准格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[dat ...

  5. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

  6. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  7. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  8. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  9. MongoDB学习:(二)MongoDB简单使用

    MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...

  10. MongoDB学习总结(二)

    前言:学习札记! MongoDB学习总结(二) 1.  安装.初识 之前写过一篇MongoDB的快速上手文章,里边详细的讲了如何安装.启动MongoDB,这里就不再累述安装过程,简单介绍一下Mongo ...

随机推荐

  1. 从连接器组件看Tomcat的线程模型——NIO模式

    Tomcat8之后,针对Http协议默认使用org.apache.coyote.http11.Http11NioProtocol,也就是NIO模式.通过之前的博客分析,我们知道Connector组件在 ...

  2. list基本使用

    list和vector的用法基本相同,区别如下: list可以头尾插入和删除,效率一样,vector只有尾部插入和删除效率才高,头部操作效率很低 list的排序有专有的接口,不能使用全局的接口,原因是 ...

  3. NCRE-Python考点

    NCRE-Python考点 作者:封亚飞本文不含 文件处理.面向对象程序设计.公共基础.计算生态希望各位可以批评指正Qq 64761294 由于图片上传不方便,需要真题的朋友可以加我的qq找我要pdf ...

  4. 题解 CF786B 【Legacy】

    本题要求我们支持三种操作: ① 点向点连边. ② 点向区间连边. ③ 区间向点连边. 然后跑最短路得出答案. 考虑使用线段树优化建图. 建两颗线段树,入树和出树,每个节点为一段区间的原节点集合.入树内 ...

  5. vue 修改路由

    直接放代码: this.$router.push({ path: "/login" });

  6. 前端学习(十):CSS选择器

    进击のpython ***** 前端学习--CSS选择器 每一条CSS样式声明由两部分组成: 选择器{ 样式: } 在CSS中{}之前的部分就是"选择器","选择器&qu ...

  7. react 阻止事件传递/冒泡

    当我们设计界面时,在以下情况会需要阻止元素/组件内的事件阻断,不被上层触发: 弹出提示框,期望点击框外空白区域可以关闭弹框.点击框内不关闭弹框 组件设计时,期望点击全局/点击指定元素时,显示不一样的交 ...

  8. form-create 组件生成规则说明

    本文介绍form-create生成规则与组件的关系 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置1 ...

  9. layer弹窗插件留言提交

    function msgShow(getname,getuserid){ layer.open({ type: 1 //此处以iframe举例 ,title: '收件人:'+getname+'(ID: ...

  10. 5.15 省选模拟赛 T1 点分治 FFT

    LINK:5.15 T1 对于60分的暴力 都很水 就不一一赘述了. 由于是询问所有点的这种信息 确实不太会. 想了一下 如果只是询问子树内的话 dsu on tree还是可以做的. 可以自己思考一下 ...