MongoDB(四)—-MongoDB的文档操作

MongoDB(四)—-MongoDB的文档操作

在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。
MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

1.插入文档

1.1插入单个文档

注意:
1.新增时不需要考虑field,如果field已经存在则向指定field中新增。如果field不存在,则在collection中新添加一个filed
2.向collection中新增数据时,如果collection不存在,则自动创建collection
向dev集合中插入单个文档。
可以使用insert/insertOne/save执行新增,语法完全相同,下面是三种写法等效:

db.c1.insert({
   name:"张三"});
db.c1.save({
   name:"张三"});
db.c1.insertOne({
   name:"张三"});

区别:
当明确给定主键时,如果主键值已经存在save表示修改,insert/insertOne会报主键重复。

1.2插入多个文档

可以使用insert/insertMany/save执行新增,区别于单条新增把新增函数参数由对象类型({})变成数组类型([{}])下面是三种写法等效:

db.c1.insert([{
   name:"a"},{
   name:"b"}]);
db.c1.insertMany([{
   name:"a"},{
   name:"b"}]);
db.c1.save([{
   name:"a"},{
   name:"b"}]);

2.更新文档

MongoDB通过update函数或者save函数来更新集合中的文档。

2.1 update函数

update() 函数用于更新已存在的文档。
语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选)})
其中更新内容为整个文档更新内容,如果更新内容中只有一个属性,除了_id以外其他属性将会被设置null。

2.2更新操作符

2.2.1 $set操作符

$set操作符:用来指定一个键并更新键值,若键不存在并创建。只能修改第一个document

语法格式:db.COLLECTION_NAME.update({查询条件},{更新操作符:{更新内容}})

$set的作用总结:

1.只修改特定的Field,解决update默认修改整个document情况

db.c1.update({
   name:"张三"},{
   $set:{
   name:"王五"}});

2.默认只修改符合条件的第一个document,如果需要全部修改,添加更新参数multi:true

db.c1.update({
   name:"张三"},{
   $set:{
   age:18}},{
   multi:true});

3.如果Field不存在,可以新建一个Field

db.c1.update({
   name:"张三"},{
   $set:{
   sex:"男"}})

2.2.2$inc操作符

可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。如果给定正数表示新增,如果给定负数表示减少。
把王五的年龄减少5岁。

db.c1.update({
   name:"王五"},{
   $inc:{
   age:-5}});

2.2.3$unset操作符

主要是用来删除键。让键的值为空。在编写命令时$unset里field取值任意,无论给定什么值都表示删除。
删除名称为王五的地址。

db.c1.update({
   name:"王五"},{
   $unset:{
   address:"随意"}});

2.2.4$push操作符

向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须是数组;键不存在,则创建数组类型的键。

向集合c1中所有文档对象添加了数组类型属性hobby,并添加一个值吃饭。如果再次执行,表示向hobby中再添加一个值写代码。默认只修改符合条件的第一条,如果需要全部修改,添加multi属性。

db.c1.update({
   },{
   $push:{
   hobby:"睡觉"}},{
   multi:true});

2.2.5$pop操作符

p o p 操 作 符 : 删 除 数 据 元 素 。 可 取 值 只 能 是 1 或 − 1 。 1 表 示 尾 部 删 除 , − 1 表 示 头 部 删 除 删 除 h o b b y 中 第 一 个 元 素 。 其 中 pop操作符:删除数据元素。可取值只能是1或-1。1表示尾部删除,-1表示头部删除 删除hobby中第一个元素。其中 pop1111hobbypop中key是要操作的数组类型属性。

db.c1.update({
   name:"李四"},{
   $pop:{
   hobby:-1}})

2.2.6$pull操作符

$pull操作符:从数组中删除满足条件的元素,只要满足条件都删除。
删除hobby中元素内容为看视频,如果存在多个都删除。

db.c1.update({
   name:"王五"},{
   $pull:{
   hobby:"看视频"}});

2.2.7$pullAll操作符

$pullAll操作符:可以设置多个条件。
删除王五中hobby为写代码和视频的值。其中属性(hobby)取值一定要是数组类型。

db.c1.update({
   name:"王五"},{
   $pullAll:{
   hobby:["写代码","看视频"]}});

2.2.8$rename

$rename操作符:对键进行重新命名。任何类型的键都能重命名。

修改王五的name属性为username。

db.c1.update({
   name:"王五"},{
   $rename:{
   name:"username"}});

3.查询文档

3.1find()函数

语法格式为:find({查询条件(可选)},{指定投影的键(可选)})
如果未给定参数则表示查询所有数据。

db.c1.find();

查询所有name为张三的文档对象

db.c1.find({
   name:"张三"})

3.2投影操作

投影查询指的就是哪些列被显示或不被显示。写到投影(projection)里面的属性可取值为1(显示)或0(不显示)。除了_id以外其他属性取值必须是相同。
sex和hobby不显示,其他属性都显示

db.c1.find({
   name:"张三"},{
   sex:0,hobby:0})

显示sex和hobby,默认_id也是显示

db.c1.find({
   name:"张三"},{
   sex:1,hobby:1})

只显示sex和hobby。只有这种情况才能出现属性取值不一样

db.c1.find({
   name:"张三"},{
   _id:0,sex:1,hobby:1})

3.3findOne()函数

findOne()函数只返回满足条件的第一条数据。
返回第一行document对象。

db.c1.findOne();

返回名字为张三的第一条数据

db.c1.findOne({
   name:"张三"})
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2321.html原文链接:https://javaforall.net

(0)
上一篇 2020年11月12日 上午9:48
下一篇 2020年11月12日 上午9:48


相关推荐

  • ODPS double类型转型精度问题总结

    ODPS double类型转型精度问题总结简介:ODPSdouble类型转型精度问题总结从相差0.0000000000001说起,本文主要是对odps的Double和Decimal的精度使用问题做一个总结。1.问题描述客户开发人员在使用maxcompute对double数据类型求和时出现错误(数据表由oracle数据库抽取到maxcompute,对应字段类型为number到double),正确的结果是1943.38,但求和结果为1943.3799999999999,结果相差了0.0000000000001,这个…

    2022年7月20日
    18
  • 二叉树算法应用案例

    笔者在1月4号将在CSDN学院开设一门公开课《算法与游戏实战》,在这里先把课程内容透露一部分给读者。首先讲述二叉树算法,二叉树在IT领域应用是非常广泛的,它不仅在游戏开发中,在当前比较火的人工智能上也得到了广泛的应用。作为使用者,首先要清楚二叉树的特性:它是n(n≥0)个结点的有限集;它的孩子节点做多是2个;它的遍历有先序,中序,后序;它的存储结构分为线性和链式存储等等;还有一种是最优二叉树也称为

    2022年4月9日
    47
  • dw自动滚动图片_DW图片无缝滚动代码

    dw自动滚动图片_DW图片无缝滚动代码DIV的图片无缝滚动,DIV图片上无缝滚动,DIV图片下无缝滚动,DIV图片左无缝滚动,DIV图片右无缝滚动1.先了解一下对象的几个的属性:innerHTML:设置或获取位于对象起始和结束标签内的HTMLscrollHeight:获取对象的滚动高度。scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶…

    2022年7月18日
    17
  • IntelliJ IDEA卸载与安装

    IntelliJ IDEA卸载与安装一、卸载(首次安装可跳过)导出配置运行卸载程序删除缓存&配置&插件卸载完成二、下载安装(一)官网:官网:http://www.jetbrains.com/idea/download/#section=windows官方文档:http://www.jetbrains.com/help/idea/meet-inte…

    2022年6月15日
    54
  • RBF神经网络实验原理_神经网络多元拟合

    RBF神经网络实验原理_神经网络多元拟合RBF神经网络及拟合实例RBF神经网络介绍RBF神经网络结构RBF神经网络算法RBF神经网络逼近算法采用RBF神经网络逼近非线性函数神经网络逼近结果代码如下RBF神经网络介绍RBF神经网络结构径向基函数(RadialBasisFunction,RBF)神经网络是一种单隐含层的三层前馈神经网络,网络结构如下图所示RBF神经网络模拟了人脑中局部调整,相互覆盖接受域(或者说感受域,ReceptiveField)的神经网络结构。与BP神经网络相同,研究人员已经证明RBF神经网络能够以任何精度逼近任

    2025年6月1日
    4
  • 为什么优秀的程序猿都阅读源码

    为什么优秀的程序猿都阅读源码

    2022年2月13日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号