MongoDB的Document操作
简介
一.Document数据插入
二.Document数据删除
三.Document数据更新
一.Document数据插入
1.插入文档
db.[文档名].insert({BSON数据})
2.批量插入文档
shell当中不支持批量插入,想完成批量插入操作,可以使用shell的for循环,或者其他高级语言当中的批量操作方法
例:使用for循环插入10个学生,在学生集合当中
我使用的是2.6的版本,发现已经支持了批量插入操作。
详见:
3.Save操作
save操作和insert操作的区别在于,save在遇到_id相同的插入数据时候,会覆盖原来的,而insert会提示错误
例子:
用insert的方法去插入一个_id相同的数据
二.Document数据删除
1.删除列表中所有数据
db.[文档名].remove({}) 集合的本身和索引不会别删除
例子:删除列表中所有数据
2.根据条件删除
例: 删除_id为10的那条记录
三.Document数据更新
1.直接覆盖更新
db.[文档名].update({查询器},{修改器})
{查询器}就相当于是条件
{修改器}就是你要直接覆盖替换的BSON数据
例:更新_id为9,那个学生,把Name变成age
注意:当主键冲突的时候会报错并且停止更新操作
例:我用_id为8的数据,去替换_id为9的记录,因为_id为8的数据已经存在,不允许有两个主键为_id:8
的记录,所以会报错。
2.采用insertOrUpdate的做法进行更新
db.[文档名].update({查询器},{修改器},true)
后面第三个参数为true,就代表是当记录不存在的时候,就插入一条记录,如果存在就更新
例:更新一个_id为10的数据,没有就插入,有就更新
3.批量更新操作
db.[文档名].update({查询器},{修改器},false, true)
※默认情况当查询器查询出多条数据的时候默认就修改第一条数据
先修改一下数据如下:
让_id为9和10的数据,有相同的内容
再插入一个_id=11,age=20的数据
第四个参数不写的情况下去更新:
如下:只能更新第一个age=20的数据
第四个参数添加并且为true的时候,我们预期是10和11都能被修正
但是当我试图去更新的时候,报错了,提示说批量更新只能在有$操作的时候使用
修正插入语句
这里注意$set后面要有":",而且它和它后面的修改器要被{}包起来,因为我第一次使用mongoDB,所以总写错。
4.使用修改器来完成局部更新操作
$set 它用来指定一个键值对,如果存在键就进行修改不存在则进行添加
{$set:{field:value}}
_id为10的数据,没有Name属性,进行了添加,有age键,就进行了修改
$inc
1.适用于数字类型
2.能够对键对应的数字类型数值进行加减操作
{$inc:{field:value}}
给age=30的数据增加2岁,由于没有使用批量更新参数,所以默认修正了第一条
$unset 删除指定的键
{$unset:{field:1}}
我在例子里面先是删除了age=30的数据的age属性,但是有一点不明白,unset后面那个field:1是什么,于是我查了一下,说是后面是什么都无所谓,unset只看键不看value,于是又做了第二个例子
$push
1.如果指定的键是数组增追加新的数值
2.如果指定的键不是数组则中断当前操作,报错
3.如果不存在指定的键则创建数组类型的键值对
{$push:{field:value}}
$pushAll
用法同上,是批量添加数组数据的操作
{$pushAll:{field:array}}
1.第一个操作没有用$pushAll,所以把["C#","JAVA"]当成一个数组项目处理了
2.第二个操作使用了$pushAll,所以当成了两项来处理的。
$addToSet
往数组中添加项目,存在就不添加,不存在就添加(push不管存不存在都添加)
{$addToSet:{field:value}}
1.先用push插入,发现更新完成后有两个“C#”
2.再用addToSet更新,发现没有增加项目
$pop
从指定数组删除一个值1删除最后一个数值,-1删除第一个数值
{$pop:{field:value}}
1.删除最后一个索引位置的数据,后面的value用"1"
2.删除第一位置索引的数据,value=-1
$pull push的逆向操作,删除键是数组的项目中的指定元素
{$pull:{field:value}}
$pullAll 批量删除数组中的指定元素
{$pullAll:{field:array}}
$ 数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($)
{$push:{field:value}}
1.实例第一个是在刚刚清空的数组里面添加了两个元素
2.我想在{“SubID”:1,"SubName":"MangoDB"}这个对象里面再添加"Teacher":"Lucy"
5.$addToSet与$each结合完成批量数组更新
理解:首先从上面的例子中我们知道,addToSet这个修改器,可以判断是否项目存在,不存在的时候就直接插入。
此时我有一个功能,例如我想往一个存在数据的数组中批量更新数据,如果存在就不更新。那么只使用addToSet是不能进行批量的,于是就要结合$each来实现。
例:
1.新创建一个文件,并使用pushAll修改器添加数据:
2.我想要批量插入"C#","PHP","JavaScript","JAVA",要求不能有重复的
如果这时候我直接用pushAll来进行更新的话,"C#"和"JAVA"就会有重复
在shell当中输入如下命令:
> db.Student.update({_id:10000},{$addToSet:{Books:{$each:["C#","PHP","Javascript","JAVA"]}}})
总结:以上就是MongoDB的Document的插入、删除以及更新的使用。
MongoDB的Document操作的更多相关文章
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- MongoDB基本命令行操作
1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- MongoDB 的聚集操作
聚合引言 聚集操作就是出来数据记录并返回计算结果的操作.MongoDB提供了丰富的聚集操作.可以检測和执行数据集上的计算.执行在mongod上的数据聚集简化了代码和资源限制. 像查询一样,在Mongo ...
- MongoDB Java API操作很全的整理
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...
- Java对MongoDB进行分组操作并统计各个分组的数量
最近在检索MongoDB的数据时需要用到分组操作,由于没有现成的说明文档可参考,只能是在代码中不断调试.摸索前进:目前已现实了Java对MongoDB的分组操作,并统计各个分组的数量.现通过示例详细解 ...
随机推荐
- SQL Server 2008 R2 制作数据库结构和数据脚本
数据库中包含众多表和数据,有时候需要创建脚本将表结构和数据一起导出 具体方法如下: 1.右键选择数据库,选择“任务”--->“生成脚本” 2.根据需求,选择制作脚本的对象,一般情况选择“表” 3 ...
- 转《本文为腾讯Bugly原创文章 ---全站 HTTPS 来了》
最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 HTTPS 进行保护.仔细观察,会发现这些网站已经全站使用 HTTPS.同时,iOS ...
- 2013 ACM区域赛长沙 K Pocket Cube hdu 4801
题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...
- 解决sublime联网失败,点击package control后没有反应
在中国大陆有可能出现这种情况,这是因为国内不支持https访问引起的(再次吐槽万恶的GFW ). 这时只需要"preferences -> package settings -> ...
- 329. Longest Increasing Path in a Matrix
最后更新 三刷? 找矩阵里的最长路径. 看起来是DFS,实际上也就是.但是如果从每个点都进行一次DFS然后保留最大的话,会超时. 这里需要结合DP,dp[i][j]表示以此点开始的最长路径,这样每次碰 ...
- oninput,onpropertychange,onchange的用法和区别
1.前言 由于工作需要,需实现一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示“您还可以输入XX字”.如下图所示: 因此,稍微研究了一下oninput,onpropertychange, ...
- Java - 推断元音辅音
随机生成字母, 推断是元音字母还是辅音字母. [0,26) + 偏移量'a'就能够生成小写字母. 代码: //: Main.java import java.util.Random; /** * 推断 ...
- SQL SERVER 中如何将NULL转换为0
select isnull(fieldname,0) from tablename 如果字段fieldname的值是null,则结果是0
- 屌丝程序猿赚钱之道 之APP
假设你已经通过APP赚到了钱,那么本文对你而言没有意义.倒是希望你可以给我们诸多建议. 通过制作APP或者说手机应用赚钱,相信是非常多程序猿希望做的事情.也确实有一些人通过APP赚到了钱. 对于程序猿 ...
- PAT---1005. Spell It Right (20)
#include<iostream> #include<stack> #include<string.h> ]= {"zero", " ...