以下都是基于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学习笔记:MongoDB 数据库的命名、设计规范
MongoDB学习笔记:MongoDB 数据库的命名.设计规范 第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...
- [MongoDB]学习笔记--基本操作
读取 db.collection.find() db.users.find( { age: {$gt: }}, {name: , address: } ).limit().sort({age:1}) ...
- MongoDB学习笔记~MongoDB实体中的值对象
回到目录 注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也 ...
- MongoDB学习笔记——MongoDB 连接配置
MongoDB连接标准格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[dat ...
- MongoDB 学习笔记(原创)
MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB学习笔记系列~目录
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
- MongoDB学习记录
一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...
- MongoDB学习:(二)MongoDB简单使用
MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...
- MongoDB学习总结(二)
前言:学习札记! MongoDB学习总结(二) 1. 安装.初识 之前写过一篇MongoDB的快速上手文章,里边详细的讲了如何安装.启动MongoDB,这里就不再累述安装过程,简单介绍一下Mongo ...
随机推荐
- OSCP Learning Notes - Exploit(1)
Gaining Root with Metasploit Platform: Kali Linux, Kioptrix Level 1 1. Find the IP of Kioptirx nmap ...
- 区间dp复习 之 tyvj 1198 矩阵连乘
题目描述 一个\(n*m\)矩阵由\(n\)行\(m\)列共\(n*m\)个数排列而成.两个矩阵\(A\)和\(B\)可以相乘当且仅当\(A\)的列数等于\(B\)的行数.一个\(N*M\)的矩阵乘以 ...
- MySQL的权限赋予
MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...
- [jvm] -- 类文件结构篇
类文件结构 结构图 魔数 头四个字节,作用是确定这个文件是否为一个能被虚拟机接收的 Class 文件. Class 文件版本 第五和第六是次版本号,第七和第八是主版本号. 高版本的 Java 虚拟机 ...
- [jvm] -- 类加载器及双亲委派模板篇
类加载器 JVM 中内置了三个重要的 ClassLoader BootstrapClassLoader(启动类加载器):最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的j ...
- 字符串学习总结(Hash & Manacher & KMP)
前言 终于开始学习新的东西了,总结一下字符串的一些知识. NO.1 字符串哈希(Hash) 定义 即将一个字符串转化成一个整数,并保证字符串不同,得到的哈希值不同,这样就可以用来判断一个该字串是否重复 ...
- 题解 洛谷 P4569 【[BJWC2011]禁忌】
考虑用\(AC\)自动机来解决本题这样的多字符串匹配问题. 要最大化魔法分割后得到的禁忌串数目,最优情况肯定为在一个串中每个禁忌串的右端点进行分割.对应到\(AC\)自动机上,就是匹配到一个禁忌串后, ...
- 题解 洛谷 P2254 【[NOI2005]瑰丽华尔兹】
发现在同一时间段中,滑动的方向具有唯一性,所以不难得出\(DP\)方程. \(f_{i,j}=max(f_{i,j},f_{i-dx_,j-dy}+dis_{i,j,i-dx_,j-dy})\) \( ...
- Supervisor通用配置
1.简介 supervisor是python开发的一个进程管理工具,可以将一个普通的命令行进程变为后台的守护进程,并且监控进程的运行状态,如果因为异常退出的时候会自动重启.它是通过fork/exec的 ...
- 干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动
摘要:该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,用户可以在控制台或通过应用侧接口创建设备联动规则,把设备上报的属性转发,通过物联网平台规则引擎转变成命令下发给其他指定设备. 场 ...