mongodb如何新增和删除子多级文档

mongodb如何新增和删除子多级文档,第1张

创建文档

向MongoDB插入数据,使用insert,

如:db.refactor.insert({"refactor's blog":"http://www.cnblogs.com/refactor"})

这个 *** 作会给 文档 增加 一个"_id",键,并保存在数据库中。

批量插入

如果要插入多个文档,使用批量插入会快一些,批量化插入能传入一个有文档构成的数据给数据库

一次批量插入只是单个的TCP请求,避免了许多零碎的请求带来的开销.由于无需处理大量的消息头,

这样能减少插入时间.每当单个文档发送致数据库时,会有一个头部信息,告诉数据库对指定的集合做

插入 *** 作.用批量插入的话,数据库就不用重复的处理每个文档的这种头部信息了.

当前版本MongoDB消息的最大长度是16M,使用批量插入是有这个限制的.

插入的原理和作用

当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送入数据库.数据库解析

BSON,检验是否包含"_id"键并且不超过16M,除此之外,不做别的验证,就只是简单的将文档原样的

存入数据库.这样做的坏处是允许插入无效的数据,好处是能让数据库更加安全,远离注入式攻击.

所有的主流语言的驱动会在传送数据之前进行一些数据的有效性检查(文档是否超长,是否含非utf-8的字符,

是否使用了未知类型).同样也可以启动数据库服务器的时候使用--objcheck选项,这样服务器就会在插入

之前先检验文档结构的有效性,当然这样要牺牲性能.

查看doc文档转化为BSON的大小(以字节为单位),在shell中使用Object.bsonsize(doc)

删除文档

db.users.remove()

会删除users集合的所有文档,但不会删除集合本身,原有的索引也会保留.

remove函数可以接受一个查询文档作为可选参数,给定这个参数,只有符合条件的文档才会被删除.

db.users.remove({"name":"Refactor"})

删除数据的永久性的,不能撤销和恢复.

如果要清除整个集合,直接删除集合(然后重建索引)比删除集合中所有的文档要快.

删除集合:db.drop_collection("users")

树形结构的存储是一种非常典型的需求,例如菜单、省市区、栏目等等。

将树形结构的每个节点作为一行存储,每个节点保存父节点的指针(pid)。优点是简单易懂,插入修改比较简单。缺点是若要获取某个节点的所有子节点,将是一件非常恶心的事情。

在方式1中增加left和right,相当于btree的左右分支,分别存储左右分支节点的最大值和最小值。优点是查询一个节点的子节点容易,仅需做范围查询查询即可。缺点是由于树形结构存储在里面,增加或修改已存在的节点将可能产生连锁反应, *** 作复杂。

将整个树结构存成一个文档,文档结构即树形结构,简明易懂。缺点是文档越来越大,对所有节点的修改都集中在此文档中,并发 *** 作受限。

将每个节点的子节点保存起来,优点是结构简单查询子节点方便,缺点是查询父节点会表麻烦。

充分利用文档型存储 schema-less的优点,受限存储一个大的树形文档,再将每个节点的其他信息单独存储。优点是 *** 作简单,结构上的 *** 作可直接 *** 作树形文档,数据上的 *** 作仅需 *** 作单条数据。缺点,对所有节点的修改都集中在此文档中,并发 *** 作受限。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11781549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存