MongoDB3.4 shell CRUD操作
输入db,显示你正在操作的数据库;切换数据库,输入use dbName,如果数据库不存在的话会自动帮我们创建一个;使用show dbs可以显示所有可用的数据库。
测试数据在文末
插入文档
插入操作的行为表现
_id字段:在MongoDB中,存储于集合中的文档需要一个唯一的_id字段作为primary key。如果文档中没有指定_id字段,MongoDB将使用ObjectId作为_id字段的默认值;也就是说,如果文档在插入时没有包含顶层的_id字段,MongoDB驱动将添加持有ObjectId的_id字段。
插入
db.users.insertOne():向集合插入单个文档 3.2新功能
db.users.insertOne({name:"webb",age:23})
插入成功后会返回对应的ObjectId:
{"acknowledged" : true,"insertedId" :ObjectId("590b237b0207f4bae6db100a")}
db.users.insertMany():向集合插入多个文档 3.2新功能
db.users.insertMany([{name:"lebo",age:22},{name:"jack",age:24}])
插入成功后会返回对应的ObjectId:
{"acknowledged" : true,"insertedIds" : [ObjectId("590b24f00207f4bae6db100b"),ObjectId("590b24f00207f4bae6db100c")]}
db.collection.insert():向集合插入一个或多个文档,想要插入一个文档,传递一个文档给该方法;想要插入多个文档,传递文档数组给该方法。
db.users.insert({name:"webb",age:24})
该操作返回了含有操作状态的 WriteResult 对象.插入文档成功返回如下 WriteResult 对象:
WriteResult({ "nInserted" : 1 })
nInserted 字段指明了插入文档的总数.如果该操作遇到了错误, WriteResult 对象将包含该错误信息。
向users集合插入多个文档:
db.users.insert([{name:"lebo",age:25},{name:"jack",age:26}])
该方法返回了包含操作状态的 BulkWriteResult 对象.成功插入文档返回如下 BulkWriteResult 对象:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
查询文档
条件查询
查找当前集合所有数据:
db.users.find({})
db.users.find()
指定查询条件:
db.users.find({age:22})
使用$in后面的查询条件(也可以使用or替代):
db.users.find({age:{$in:[22,23]}})
复合查询:
db.users.find({name:"ahn", age:22})
使用or:
db.users.find({$or:[{status:"A"},{age:{$lt:30}}]})
返回查询的映射字段
映射文档:映射文档限制了返回所有匹配文档的字段。映射文档可以指明包括哪些字段或者排除哪些字段:
{ field1: <value>, field2: <value> ... }
value:
1或true在返回的文档中包含字段
0或false排除该字段
只返回指定字段及_id字段:
db.users.find({status:"A"}, {name:1, status:1})
只返回指定字段:
db.users.find({status:"A"}, {name:1, status:1,_id:0})
返回除了排除字段外的字段:
db.users.find({status:"A"}, {name:0, status:0})
返回嵌入文档中的指定字段:
db.users.find({status:"A"}, {name:1,status:1,"favorites.food":1})
查询值为null或者不存在的字段
插入测试数据:
db.users.insert([{ "_id" : 900, "name" : null },{ "_id" : 901 }])
相等过滤器:将返回两个文档。如果该查询使用了sparse索引,不管怎样,那么该查询将仅仅匹配 null 值,而不匹配不存在的字段。
db.users.find({name:null})
类型筛查:查询仅仅匹配那些包含值是null的name字段的文档。
db.users.find({name:{$type:10}})
存在行筛查:只返回没有name字段的文档。
db.users.find({name:{$exists:false}})
更新文档
行为表现
_id字段:一旦设定,你不能更新_id字段的值,你也不能用有不同_id字段值的替换文档替换已经存在的文档。
文档大小:当执行更新操作增加了文档大小,超过了为该文档分配的空间时,更新操作会在磁盘上重新定位该文档。
更新文档中指定字段
db.collection.updateOne():更新匹配过滤条件第一个匹配的文档 3.2新功能
使用$set操作符更新指定的字段
使用$currentDate操作符更新lastModified字段的值到当前时间
db.users.updateOne({"name":"sue"},{$set:{type:3},$currentDate:{lastModified:true}})
db.collection.updateMany():更新所有匹配过滤条件的文档 3.2新功能
db.users.updateMany({"name":"lebo"},{$set:{age:22},$currentDate:{lastModified:true}})
db.collection.update():更新匹配过滤条件第一个匹配的文档
db.users.update({name:"webb"},{$set:{age:21},$currentDate:{lastModified:true}})
文档替换
db.collection.replaceOne():将匹配过滤条件的第一个文档替换为新文档。 3.2新功能
db.users.replaceOne({name:"webb"},{name:"webb",age:21})
db.collection.update():将匹配过滤条件的第一个文档替换为新文档。
db.users.update({name:"xyz"},{name:"mee", age:25, type:1, status:"A"} )
删除文档
删除所有文档
db.collection.deleteMany() 3.2新功能
db.users.deleteMany({})
db.collection.remove()
db.users.remove({})
删除满足条件的所有文档
db.collection.deleteMany() 3.2新功能
db.users.deleteMany({name:"lebo"})
db.collection.remove():删除所有type为1的文档。
db.users.remove({type:1})
仅删除一个满足条件的文档
db.collection.deleteOne() 3.2新功能
db.users.deleteOne({name:"webb"})
db.collection.remove():将参数设置成1来删除第一个name为webb的文档。
db.users.remove({name:"webb"},1)
测试数据:
```
db.users.insertMany(
[
{
_id: 1,
name: "sue",
age: 19,
type: 1,
status: "P",
favorites: { artist: "Picasso", food: "pizza" },
finished: [ 17, 3 ],
badges: [ "blue", "black" ],
points: [
{ points: 85, bonus: 20 },
{ points: 85, bonus: 10 }
]
},
{
_id: 2,
name: "bob",
age: 42,
type: 1,
status: "A",
favorites: { artist: "Miro", food: "meringue" },
finished: [ 11, 25 ],
badges: [ "green" ],
points: [
{ points: 85, bonus: 20 },
{ points: 64, bonus: 12 }
]
},
{
_id: 3,
name: "ahn",
age: 22,
type: 2,
status: "A",
favorites: { artist: "Cassatt", food: "cake" },
finished: [ 6 ],
badges: [ "blue", "red" ],
points: [
{ points: 81, bonus: 8 },
{ points: 55, bonus: 20 }
]
},
{
_id: 4,
name: "xi",
age: 34,
type: 2,
status: "D",
favorites: { artist: "Chagall", food: "chocolate" },
finished: [ 5, 11 ],
badges: [ "red", "black" ],
points: [
{ points: 53, bonus: 15 },
{ points: 51, bonus: 15 }
]
},
{
_id: 5,
name: "xyz",
age: 23,
type: 2,
status: "D",
favorites: { artist: "Noguchi", food: "nougat" },
finished: [ 14, 6 ],
badges: [ "orange" ],
points: [
{ points: 71, bonus: 20 }
]
},
{
_id: 6,
name: "abc",
age: 43,
type: 1,
status: "A",
favorites: { food: "pizza", artist: "Picasso" },
finished: [ 18, 12 ],
badges: [ "black", "blue" ],
points: [
{ points: 78, bonus: 8 },
{ points: 57, bonus: 7 }
]
}
]
)
```
MongoDB3.4 shell CRUD操作的更多相关文章
- Mongo Shell CRUD操作
1.创建并使用test数据库 use test; 此时使用show dbs;命令查看当前存在的数据库是查看不到test数据库的,只有当test中insert数据之后才能查看到test数据库 删除数据库 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...
- SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作
上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了. 建议去安装体验一下吧. 在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰.Mon ...
- SQLite CRUD操作
SQLite CRUD操作代码实例: 1:首先创建一个继承了SQLiteOpenHelper类的MyDatabaseHelper类.实现他的onCreate(SQLiteDatabase db) on ...
随机推荐
- (15)IO流之File
File类用封装了一个文件夹或者文件的所有属性. File类的构造方法: File(String pathname) 指定文件或者文件夹的路径创建一个File文件 File(File parent, ...
- 【树莓派】h2数据库操作相关
之前在树莓派上面操作时候,遇到一些业务方面的bug,和团队中的同事经过多次尝试,但就是难以重现用户现场的问题. 但是问题却实实在在地发生,虽然并不是必然可重现的bug,但是也比较闹心: 发生了问题,也 ...
- download 下载文件 IE兼容性处理
根据CANIUSE(http://caniuse.com/#search=download)download兼容性如下图所示: 如上图所示,IE浏览器是不支持的. 1.测试代码: <!docty ...
- java学习笔记 --- 面向对象3
一.创建对象是做了些什么事情? 图解: 二.static关键字 (1)静态的意思.可以修饰成员变量和成员方法. (2)静态的特点: 1.静态是随着类的加载就加载了.也是随着类的消失而消失了. 2.静态 ...
- Linux之tr命令
tr - translate or delete characters 删除或替换文字信息 参数: -d 删除字符串 -s 删除重复的字符串只保留一个 [root@BASE ~]# cat c.t ...
- git clone操作到开发机的错误记录
在开发机上,执行操作 $ git clone https://github.com/xxx/rank.git 返回错误: error: The requested URL returned error ...
- 2017-3-28 JavaScript 基础、语法
前端三剑客: html+css+js(html 决定网页上有什么,css决定东西是怎么摆放的,js决定东西的功能) js定义: js是一个脚本语言,需要有宿主文件,它的宿主文件是html文件. js ...
- 老李推荐:第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 3
首先它通过查找JVM中的System Property来找到"com.android.monkeyrunner.bindir"这个属性的值,记得前面小节运行环境初始化的时候在mon ...
- 聊天界面使用IQKeyboardManager导航栏及整个页面上移的解决方法
问题: 使用第三方库IQKeyboardManager时会使整个页面上移,导航栏页偏移出了显示范围.在聊天界面就会使得上面的消息看不到. 解决方法: 首先说明:在聊天界面使用IQKeyboardMan ...
- 写出稳定的Modbus代码之点滴经验
1.引言 Modbus是工业领域重要的协议,物理层有常见的RS485双绞线和TCP,所以又常说Modbus 485开发和Modbus TCP开发. 前者就是串口通信,比较简单.后者涉及到网络协议,复杂 ...