MongoDB学习2:MongoDB的基本操作
阅读原文时间:2023年07月10日阅读:1

以下都是基于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()来删除数据库
  • 数据库相应的文件会被删除,磁盘空间将被释放
  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 …

  11. Ethical Hacking - NETWORK PENETRATION TESTING(22)

    MITM - Wireshark WIreshark is a network protocol analyser that is designed to help network administa …

  12. 服务注册与发现【Eureka】- Eureka简介

    什么是服务治理 SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来 实现服务治理. 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所 …

  13. 015.Nginx重定向

    一 重定向概述 1.1 重定向介绍 重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向.域名的重定向.路由选择的变化也是对数据报文经由路径的一种重定向). …

  14. github 新功能 profile README.md

    引 自从github被微软收购后,每天都会有一些新花样,ui变化,界面变化,更多的功能,相信这个它会越来越好,程序员越来越喜欢.今天浏览大佬的github 无意中发现了 github profile …

  15. 在同一form表单中如何提交两个不同的action

    摘自:CSDN博客 原文链接地址:http://blog.csdn.net/huazhangena/article/details/7903955 有两种办法可以实现:1.针对一个action有多个提 …

  16. for循环运用,三角形

    用for循环打出三角形.倒三角形.金字塔.99乘法表 三角形: 打出如图三角形,分析行数与*个数的关系,用for循环 for(var i=0;i<5;++i){//i表示行数 var str=& …

  17. CSS 技巧一则 -- 不定宽溢出文本适配滚动

    在日常布局当中,肯定经常会遇到文本内容超过容器的情况.非常常见的一种解决方案是超出省略. 但是,有的时候,由于场景的限制,可能会出现在一些无法使用超出打点省略的方法的场景,譬如在导航栏中: 这种情况下 …

  18. SpringBoot2 整合MinIO中间件,实现文件便捷管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.MinIO简介 1.基础描述 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 …

  19. 移动端rem字体适配JS

    // 『REM』手机屏幕适配,兼容更改过默认字体大小的安卓用户 function adapt(designWidth, rem2px) { // designWidth:'设计图宽度' 1rem==r …

  20. Python访问列表中的值

    Python访问列表中的值: 列表中可以包含所有数据类型: # 列表中可以存放 数字数据类型数据 # int 型数据 lst = [1,2,3] print(lst) # [1, 2, 3] # fl …

热门专题

E盘有那个文件夹为什么CD进不去

java宠物商店数据库

toplainstring和tostring

springboot前后端分离上传文件提供http访问

浏览器ipv6访问设置

ssh 登录获取系统资源信息

Fragment ActionBar 不起作用

shell 实时记录 linux内存和cpu占用

vue3项目打包后修改配置

stirling近似公式求阶乘

easyconnect怎么用

android studio广播机制实例

gotlab clone地址不对

java oracle 每分钟数据量

Hbase影视行业逻辑结构

BITCOIN 命令 节点

Android 打印cursor

linux keytool 和openssl

sqlserver 索引能为空

Soeasy Excel插件

Home

Powered By WordPress