MongoDB学习(操作集合中的文档)
文档概念
文档的数据结构和JSON基本一样。
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
插入文档
insert()方法
要将数据插入到 MongoDB 集合中,可以使用 insert() 方法。
db.collection_name.insert(document)
其中test为集合名。如果数据库中不存在集合,则MongoDB将创建此集合,并将文档插入到该集合中。
在插入的文档中,如果不指定 _id 参数,MongoDB会为此文档分配一个唯一的Object_id。
_id 为集合中的每一个文档的12个字节的十六进制数。12 字节划分为:
id: ObjectId( 4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要在单个语句中插入多个文档,可以在 insert() 命令中传递文档数组。
> db.test.insert([
... {name:"uzi",
... like:["MongoDB","JAVA","Database"],
... },
... {name:"957",
... parents:[{
... father:"letme",
... mather:"mlxg"}],}])
添加代码
save()方法
要插入文档,也可以使用 db.collection_name.save() 方法。与 insert() 方法不同的是,当输入的id值相同时, insert() 方法无法插入,但 save() 方法会更新包含 该 id 值的文档的全部数据。
insertOne()方法
db.collection_name.insertOne() 方法将单个文档插入到集合中。如果没有指定 _id ,MongoDB会自动将添加。
该方法会返回包含新插入的文档的 ”_id"字段值的文档。
insertMany()方法
db.collection_name.insertMany() 方法可以将多个文档插入到集合中。如果没有指定 _id,则自动添加ObjectId
更新文档
更新运算符
在MongoDB中进行更新操作时,可以使用运算符进行文档数据的局部修改。
运算符 | 描述 | 语法 |
$set | 更新字段的值,如果字段不存在则进行添加 | { $set : { field : value } } |
$inc |
将字段值增加指定的量 |
{ $inc : { field : value } } |
$rename |
重命名字段名(键名) |
{ $rename : { field : value } } |
$unset |
删除指定的字段(键) |
{ $unset : { field : "1" } } |
$setOnInsert |
在更新操作中新建文档时设置字段的值 |
{ $setOnInsert : { field : value } } |
$addToSet |
在已有数组中添加元素,如果元素存在则不操作 |
{ $addToSet : { field : value } } |
$pop |
删除数组的第一个或最后一个元素。如果值为“-1",则删除第一个元素; 如果值为”1",则删除最后一个元素。 |
{ $pop : { field : value } } |
$push |
1.如果指定的键是数组则追加新的值; 2.如果指定的键不是数组则无法成功执行 3.如果不存在指定的字段(键)则创建数组类型的键值对 |
{ $push : { field : value } } |
$pushAll |
用法与 $push 类似,一次可以添加多个值到数组 |
{ $pushAll : { field : [ value1,value2,...] } } |
$pull |
从数组中删除指定值 |
{ $pull : { field : value } } |
$pullAll |
从数组中删除多个值,要删除的值是以数组指定的 |
{ $pullAll : { field : [ value1,value2,...] } } |
$each |
用于运算符$push和$addToSet 的限定符,用于在数组中添加多个单独的元素,防止直接添加进数组元素 |
field : { $each : [ value1,...] } |
$slice |
用于运算符 $push 的限定符,用于限制更新后的数组长度 |
field : { $slice : < num > } |
$sort |
用于运算符 $push 的限定符,用于将数组中的文档重新排序 |
|
$bit |
对整数值执行按位与和或运算。 |
更新方法 update()
Collection 对象的 update() 方法可以更新集合中的文档。
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query:查询条件,类似sql update查询内where后面的条件。
- update:要更新的内容和一些更新的操作符(如 $set...)等,类似sql update查询内set后面的参数。
- upsert:可选。参数upsert是个布尔值,如果为 true 且没有文档与查询匹配,则插入一个新文档;如果为 false 则不插入。 默认为 false。
- multi:可选。mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新。
- writeConcern:可选。抛出异常的级别。
注意:如果不使用运算符,则update内容不会进行局部修改,而是全局修改。
示例:
#将name为uzi的学生的age加5
db.student.update({name:"uzi"},{$inc:{age:5}}) #把uzi的sex改为boy
db.student.update({name:"uzi"},{$set:{sex:"boy"}}) #把uzi的like字段删除
db.student.update({name:"uzi"},{$unset:{like:1}}) #给uzi的添加别名dog
db.student.update({name:"uzi"},{$push:{aname:"dog"}}) #给uzi添加多个别名
db.student.update({name:"uzi"},{$pushAll:{aname:["A1","A2"]}}) #给uzi的别名数组里再添加一个数组
db.student.update({name:"uzi‘},{$addToSet:{aname:["A3","A4"]}}) #删除别名数组内第一个别名
db.student.update({name:"uzi"},{$pop:{aname:-1}}) #删除别名 A2
db.student.update({name:"uzi"},{$pull:{aname:"A2"}})
局部更新语句示例
save() 方法
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
- document:文档数据
- writeConcern:可选。抛出的异常级别。
无需指定query和update对象,直接将新文档替换掉原来的旧文档。它通过文档中的_id字段确定要修改的字段。
如果集合中没有与传入文档的_id字段值相等的文档,则会添加新的文档。
save() 函数的执行效率要低于update()。
查看文档
查看集合中的文档,可以使用find()方法。
db.collection_name.find() 可以以非结构化的方式显示集合中的所有文档。
db.collection_name.find().pretty() 可以以结构化的方式显示集合中的所有文档。
删除文档
remove()函数可以用来删除集合中的文档。
db.collection_name.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query:可选。删除的文档的条件。
- justOne:可选。如果为true 或 1,则只删除一个文档。默认为false。
- writeConcern:可选。抛出异常的级别。
示例:
注意:如果要删除集合中的全部文档,可以使用
db.collection_name.remove({})
MongoDB学习(操作集合中的文档)的更多相关文章
- Mongoose在向集合中插入文档时的集合命名问题
Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作. 从创建连接到向数据库中写入一个条数据经历了以下步骤: 1.连 ...
- MongoDB学习笔记三—增删改文档上
插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...
- MongoDB学习笔记四—增删改文档下
$slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...
- Mongodb(2)创建数据库,删除数据库,创建集合,删除集合,显示文档内容
显示所有数据库列表:show dbs > show dbs local .078GB runoob .078GB > 显示当前数据库:db > db runoob > 显示所有 ...
- MongoDB学习笔记——集合管理
创建集合 使用db.createCollection(name, options) 方法创建集合 name 所创建的集合名称必选! options 可选.指定有关内存大小及索引的选项 db.creat ...
- MongoDB常用操作--集合2
1.查询集合中的文档,可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档 2.查询集合中的文档,返回某些特定的键值 3.查询集合中的文档 ...
- 2.MongoDB系列之创建更新删除文档
1. 插入文档 // 单条插入 db.getCollection('blog').insertOne({'type': 'mongodb'}) // 批量 插入 db.getCollection('b ...
- MongoDB常用操作--集合1
1.创建集合有两种方式,显示创建和隐式创建 显示创建可以使用命令 db.createCollection("集合名称") 隐式创建可以使用命令 db.集合名称.insert({}) ...
- MongoDB常用操作--集合3
1.更新集合中的文档,语法如下: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:用于设置查询条件的对象 objNe ...
随机推荐
- C# RichTextBox 滚动条 滚动到最新行
richTextBox.Select(richTextBox.TextLength, 0); richTextBox.ScrollToCaret();
- React + TypeScript:元素引用的传递
React 中需要操作元素时,可通过 findDOMNode() 或通过 createRef() 创建对元素的引用来实现.前者官方不推荐,所以这里讨论后者及其与 TypeScript 结合时如何工作. ...
- 5.3Role和Claims授权「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. Role授权 这是一种Asp.Net常用的传统的授权方法,当我们在 ...
- Cenots7下安装运行.NET Core、MicroSoft SQL Server 2019 preview 的基础实践
一:概要 适应人群:.Net初学者.想了解.Net Core在Linux系统中的运行环境搭建者.初次且想在linux上应用.Net Core开发应用程序者: 基础技能:了解.NET基础开发技能者.有一 ...
- BFPRT算法
解决的问题:在一个数组中找到最小的k个数 常规解法:1.排序,输出前k个数,时间复杂度O(n*log(n)). 2.利用一个大小为k的大根堆,遍历数组维持大根堆,最后返回大根堆就可以了,时间复杂度O( ...
- wow.js让css3动画变动更有趣(滚动页面动画模拟懒加载特效)
CSS3的出现给网站页面增加了活力,网站增色不少,有这么小小的一款插件就能做出很多动画效果. 最重要的是它:简单易用.轻量级.无需 jQuery......他就是wow.js 地址:https://d ...
- SuperMap iObject入门开发系列之二地下三维管线系统介绍
本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 上次对超图平台组件式开发进行介绍,这次介绍的是基于这个框架开发的地下三维管线系统.地下管线涉及给水.雨水.污水.燃气. ...
- Genymotion Android模拟器Genymotion的安装和使用
Android模拟器Genymotion的安装和使用 by:授客 QQ:1033553122 环境: Win7 Genymotion 2.12.0 下载地址:http://download.canad ...
- 秋季学期学习总结&&以及下学期的期待
秋季总结 第一学期已经结束了,下面来分点归纳下知识点: ·基础编程:利用c语言来进行编程 ·分支结构:利用if-else语句和switch语句编程,以及字符型数据的利用 ·循环结构:利用while.d ...
- 不能直接获取?聊聊如何在Shader Graph中获取深度图
0x00 前言 在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了** StreamingAssets.Profil ...