MongoDB学习笔记-创建、更新、删除文档

创建

MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中。

db.foo.insert({“hehe”:”呵呵”})

如果想批量插入的话可以使用下面这种形式:db.foo.insert([{“hehe”:”呵呵”},{“haha”:”哈哈”}])

  • 插入校验

插入数据时MongoDB只对数据进行最基本的检查-检查文档的基本结构。如果没有“_id”字段,就会自动增加一个,所有文档都必须小于16MB(这个值是MongoDB设计者人为定义的,未来可能会增加)。这样的限制主要是为了防止不良的模式设计,并且保证性能一致。

由于MongoDB只进行最基本的检查,所以插入非法数据很容易。因此,应该只允许信任的源连接数据库。

删除

在MongoDB中可以使用remove()和drop()来删除数据。删除数据是永久性的,不能撤销也不能恢复。

remove()用来删除文档,有两个重载,如下:

db.foo.remove():删除整个foo集合中所有文档。但foo不会被删除,也不会删除foo的元数据

db.foo.remove(搜索条件):删除指定条件的文档

drop() 用来清空整个集合,它删除文档的速度很快。如下:

db.foo.drop()

更新

update方法用来更新数据库里的文档。它有两个参数,一个是查询文档,用于定位需要更新的目标文档;另一个是修改器(modifier)文档。用于说明要对找到的文档进行哪些修改。查询文档参数最好使用”_id”来匹配。这样可以防止查询条件匹配到多个文档。

->var a=db.foo.findOne({"hehe":"呵呵"}); ->delete a.hehe ->a.wuli="wuli韬韬"; ->db.foo.update({"hehe":"呵呵"},a);

  • 部分更新(修改器)

文档的部分更新是通过更新修改器(update modifier)来实现的。更新修改器是特殊的键,用来指定复杂的更新操作,比如修改、增加或者删除键,还可以操作数组和内嵌文档

$set:用来指定一个字段的值。如果这个字段不存在的话,则创建它。

db.foo.update({“_id”:”123”},{“$set”:{“nb”:”new baby”}});

如果“nb”这个字段不存在的就会创建一个“nb”字段,反之就会更新“nb”字段值。“$set”甚至可以修改键的类型。如下:

db.foo.update({“_id”:”123”},{“$set”:{“nb”: [“new bady”,”niubi”]}});

“$set”还可以用于内嵌文档:

db.foo.update({“_id”:”123”},{“$set”:{“author.name”:”唐家三少”}})

$unset:用来删除一个字段,如下:

db.foo.update({“_id”:”123”,{“$unset”:{“nb”: [“new bady”,”niubi”]}});

$inc:用来添加已有键的值,如果不存在则会创建一个。它只能用于整型、长整型或浮点型。要是用在其他的数据类型上就会报错。

db.foo.update({“_id”:”123”},{“$inc”:{“score”:50}})

如果score键不存在则会创建,并把值设为50。以后每次调用上面的方法,score就会自增50

  • 数据修改器

$push:向数组末尾添加一个元素,要是这个数组不存在就创建一个数组。

db.foo.update({“_id”:”123”},{“$push”:{“Age”:12}})

$each:一次添加多个值。

db.foo.update({“_id”:”123”},{“$push”:{“Times”:{“$each”: [1,4,3,2,2]}}})

$slice:限定素组最大长度。它的值必须是负整数。如果添加的值超出限制,那么只会包含最后加入的元素。必须与”$each”使用。

db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10}})

$sort:顾名思义,对数组元素进行排序。必须与”$each”使用。

db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10},”$sort”:{“Times”:-1}})

$ne/$addToSet: 保证添加到数组内的元素不会重复。

db.foo.update({“_id”:”123”},{“$ne”,”hehe”},{“$push”:{“nb”:”hehe”}})

db.foo.update({“_id”:”123”},{“$addToSet”:{“emails”:”[email protected]”}})

$ne $addToSet的区别:$ne不可以和$each一起使用,通过上面的例子就可以看出。$addToSet则可以;$addToSet结合$each可以一次性添加多个元素

db.foo.update({“_id”:”123”},{“$addToSet”: {“$each”: [“[email protected]”,”[email protected]”]}})

$pop/$pull: 删除数组元素。“$pop”可以删除数组中头尾的位置元素。有时需要基于特定条件来删除元素,而不仅仅是依据元素的位置,这时可以使用“$pull”来完成。“$pull”会删除所有匹配的文档 。

db.foo.update({“_id”:”123”},{“$pop”:{“title”:1}})

db.foo.update({},{“$pull”}:{“_id”:”123”})

  • 数组定位修改器

若对数组元素之进行操作,有两种方法:通过下标或定位操作符$.

例如,一个文档的格式如下:

{

“_id”:”123”,

“comments”: [{“comment”:”hehe”,”author”:”zs”}]

}

  • 使用$来修改author键的值

db.foo.update({“_id”:”123”},{“$set”:{“comments.$.author”:”ls”}})

  • upsert

upsert是一种特殊的更新。要是没有找到符合更新条件的文档,就会以要更新的文档为基础创建一个新文档。如果找到了则正常更新。同时,upsert既可以避免竞态问题,又可以缩减代码量。使用方式:设置update方法第三个参数为true就可以了

  • 更新多个文档

默认情况下,更新只能对符合条件的第一个文档生效。要想更新多个符合条件的文档的话,可以将update方法第四个参数设为true即可。

写入安全机制

写入安全(Write Concern)是一种客户端设置,用于控制写入的安全级别。有两种最基本的写入安全机制,应答式写入(acknowledged write)和非应答式写入(unacknowledged write)。应答式写入是默认的方式:数据库会给出相应,告诉你写入操作是否成功执行。非应答式写入不返回任何相应,所以也无法知道写入是否成功。2012年以前,MongoDB默认的写入安全机制是非应答写入。所以用2012之前的MongoDB时记得把写入安全机制显式的设为应答式写入

时间: 2024-10-22 08:51:53

MongoDB学习笔记-创建、更新、删除文档的相关文章

MongoDB创建\更新\删除文档操作

?? 一.插入\创建文档 --当插入一个不存在的文档时,会自动创建一个文档 [[email protected] ~]# mongo MongoDB shell version: 2.4.14 connecting to: test > show collections > db.cols.insert({bar:"baz"}) > db.cols.find() { "_id" :ObjectId("56aac1df4e61b6d9f84

MongoDB(二)创建更新删除文档

插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz"}) 如果要批量插入怎么办呢,看下面代码: >db.foo.insert([{"_id":0},{"_id":1},"{"_id":2}]) 以前有一个batchInsert函数,现在已经没有了.注意在批量插入的过程中如果有一个文档插

Elasticsearch学习笔记-04.2删除文档

删除文档非常的简单而直观.下面的例子示意了如何删除我们之前创建的ID为2的客户文档: DELETE /customer/external/2?pretty 要删除所有满足检索条件的文档可以参考 [Delete By Query API].不过这个API并没有太大价值,因为删除整个索引要比删除索引中的满足条件的所有的文档来的更高效. 本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. https://www.elastic.c

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

REST API (更新删除文档)

Elasticsearch的更新文档API准许通过脚本操作来更新文档.更新操作从索引中获取文档,执行脚本,然后获得返回结果.它使用版本号来控制文档获取或者重建索引. 我们新建一个文档: 请求:PUT http://localhost:9200/test/type1/1?pretty 参数: { "counter" : 1, "tags" : ["red"] } 脚本开启功能 在最新版本的Elasticsearch中,基于安全考虑(如果用不到,请保

JavaScript学习笔记7 之DOM文档对象模型

一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分.DOM树中的所有节点均可通过JS进行访问.所有HTML元素(节点)均可被修改.创建或删除. 二.节点类型1.节点类型 HTML 文档中的所有内容都是节点(node): 整个文档是一个文档节点每个 HTML 元素是元素节点HTML 元素

Python学习笔记__8.4章 文档测试

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 在文档中编写规范的注释代码.则Python内置的"文档测试"(doctest)模块可以直接提取注释中的代码并执行测试. 1.1.以abs()函数为例: #abs.py def abs(n): ''' # 两个为一对,换行输入 Function to get absolute value of number.  # 简单的介绍 Example: >>> abs(1)   # 测试 1 >>>

《DOM Scripting》学习笔记-——第八章 充实文档的内容

本章内容 一.一个为文档创建"缩略词语表"的函数 二.一个为文档创建"文献来源链接"的函数 三.一个为文档创建"快速访问键清单"的函数 利用DOM动态的收集和创建一些有用的辅助信息,并把它们呈现在网页上的基本思路: 1.把隐藏在属性里的信息检索出来(遍历.提取) 2.把这些信息动态的创建为一些html内容(创建元素节点.将内容插入元素节点) 3.把这些html内容插入到文档里(追加) Html代码: 1 <!DOCTYPE html PUB

php学习笔记之将word文档转化为HTML文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-