文档概念

  文档的数据结构和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学习(操作集合中的文档)的更多相关文章

  1. Mongoose在向集合中插入文档时的集合命名问题

    Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作. 从创建连接到向数据库中写入一个条数据经历了以下步骤: 1.连 ...

  2. MongoDB学习笔记三—增删改文档上

    插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...

  3. MongoDB学习笔记四—增删改文档下

    $slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...

  4. Mongodb(2)创建数据库,删除数据库,创建集合,删除集合,显示文档内容

    显示所有数据库列表:show dbs > show dbs local .078GB runoob .078GB > 显示当前数据库:db > db runoob > 显示所有 ...

  5. MongoDB学习笔记——集合管理

    创建集合 使用db.createCollection(name, options) 方法创建集合 name 所创建的集合名称必选! options 可选.指定有关内存大小及索引的选项 db.creat ...

  6. MongoDB常用操作--集合2

    1.查询集合中的文档,可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档 2.查询集合中的文档,返回某些特定的键值 3.查询集合中的文档 ...

  7. 2.MongoDB系列之创建更新删除文档

    1. 插入文档 // 单条插入 db.getCollection('blog').insertOne({'type': 'mongodb'}) // 批量 插入 db.getCollection('b ...

  8. MongoDB常用操作--集合1

    1.创建集合有两种方式,显示创建和隐式创建 显示创建可以使用命令 db.createCollection("集合名称") 隐式创建可以使用命令 db.集合名称.insert({}) ...

  9. MongoDB常用操作--集合3

    1.更新集合中的文档,语法如下: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:用于设置查询条件的对象 objNe ...

随机推荐

  1. 从壹开始微服务 [ DDD ] 之十 ║领域驱动【实战篇·中】:命令总线Bus分发(一)

    烽火 哈喽大家好,老张又见面了,这两天被各个平台的“鸡汤贴”差点乱了心神,博客园如此,简书亦如此,还好群里小伙伴及时提醒,路还很长,这些小事儿就随风而去吧,这周本不打算更了,但是被群里小伙伴“催稿”了 ...

  2. 基于Unity的AR开发初探:第一个AR应用程序

    记得2014年曾经写过一个Unity3D的游戏开发初探系列,收获了很多好评和鼓励,不过自那之后再也没有用过Unity,因为没有相关的需求让我能用到.目前公司有一个App开发的需求,想要融合一下AR到A ...

  3. 聊聊 JUC 并发包

    今天开始我们聊聊 Java 并发工具包中提供的一些工具类,本文主要从并发同步容器和并发集合工具角度入手,简单介绍下相关 API 的用法与部分实现原理,旨在帮助大家更好的使用和理解 JUC 工具类. 在 ...

  4. Scrapy爬取Ajax(异步加载)网页实例——简书付费连载

    这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...

  5. ASP .NET SignalR起步

    在网站开发中,时常需要使用消息推送功能,http协议是无状态连接,我们需要一个类似桌面程序中socket保持服务器和客户端连接的技术.signalr就是这样一个技术,他能保持网站页面和服务器的一个长连 ...

  6. mt8665芯片怎么样?联发科mt8665芯片参数介绍

    MediaTek的MT8665是一款高度集成的LTE片上系统(SoC),它包含了先进的功能,例如LTE cat.4.Octa HMP核心在1.5GHz下工作.3D图形(OpenGLES 3.0).13 ...

  7. Process 'command 'D:\jdk8\jdk\bin\java.exe'' finished with non-zero exit value 2

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10539006.html 捣鼓了好久,现在已经不想说话,为何会出现这个问题,Process 'comman ...

  8. MAC中使用APICloud同步代码错误解决办法

    在MAC上使用APICloud同步代码时出现错误,其实就是git位置的问题,简单点就是把路径映射下. 问题提示: Can't locate SVN/Core.pm in @INC (you may n ...

  9. C#中关于表达式与委托在EF中的不同表现总结

    Func<Invoice, bool> func = x => x.State == InvoiceState.Created; Expression<Func<Invo ...

  10. 2. [mmc subsystem] mmc core数据结构和宏定义说明

    一.host相关 1.struct mmc_host struct mmc_host是mmc core由host controller抽象出来的结构体,用于代表一个mmc host控制器. 数据结构如 ...