数组在nosql数据库中扮演着特别的角色,某些场景下使用数组将会特别方便,例如如下场景
- 数据量较小,十万以下
- 有多对多的关系存在
- 包含正反向查询
- 不频繁更新数组中的数据
例如博客文章中的标签,可能会有一篇文章包含多个标签,一个标签对应多篇文章
tag --> [
article1,
article2,
article3,
article4
]
article --> [
tag1,
tag2,
tag3,
tag4,
]
在这种场景下,可能会需要利用标签查询特定文章,以及反向查询:查询文章包含的标签,在nosql数据库中完全可以使用数组来组织这种多对多的关系
考虑设计collection 结构,文章collection:article,标签collection:article2tag
article {
title:'',
content:'',
tag:[],
atime:''
}
article2tag {
tag:''
articleList:[],
atime:'',
size:0
}
article的tag键是数组类型,值为单个article的标签 article2tag的articleList键是数组类型,值为包含此标签的文章
每次文章添加新标签的时候,更新文章和标签的对应关系
#!/usr/bin/env python
#更新文章标签
db.article.update({'_id':article_id},{'$set':{'tag':tags}})
#在二者对应关系中清除之前该文章的所有关系,使用数组的$pull操作,及删除该文章和标签的所有关系,并将数组长度减小1
db.article2tag.update({'article2list':article_id},{'$pull':{'articleList':article_id},'$inc':{'size':-1}},multi=True)
#建立新的关系
for i in tags:
db.article2tag.update({'tag':i},{'$push':{'article2list':article_id},'$inc':{'size':1}})
#清除不包含文章的标签
db.article2tag.remove({'size':{'$lte':0}},multi=True)
注意
当数组变得很大时,$push和$pull对性能将产生比较大的影响,所以在使用$push和$pull的场景中一定是小数据量且不发生频繁更新的场景,如果你的数组会变得很大,那么考虑把数组中的数据单独提取为一个collection吧 ->:)!
相关推荐
4. **多对多(Many to Many)**:在MongoDB中,多对多关系通常通过内嵌文档或者使用单独的关联集合实现。可以使用`morphToMany`、`morphedByMany`或自定义查询来实现。 5. **内嵌文档(Embedded Documents)**:在...
MongoDB中的数据是以文档的形式存储在集合(Collection)中,文档由键值对组成,类似于JSON对象。一个集合可以看作是关系数据库中的表,而文档则相当于行。例如,一个用户集合可能包含多个用户文档,每个文档包含了...
在 MongoDB 中,可以建立多个数据库。常用操作包括: 1. Help 查看命令提示:db.help(); 2. 切换/创建数据库:use test 如果数据库不存在,则创建数据库,否则切换到指定数据库。 3. 查询所有数据库:show dbs; 4. ...
- **数据建模**:相较于传统关系型数据库中将数据分布在多个表中,MongoDB 更倾向于将相关数据存储在同一文档内,以简化查询操作。 #### 四、MongoDB 架构的关键组件 - **_id 字段**:每条文档都必须包含一个 `_id`...
MongoDB 是一种流行的开源NoSQL数据库,以高性能、高可用性和...而Spring Boot简化了与MongoDB的集成,使得在Java应用中使用MongoDB变得更加方便。在实际项目中,开发者应根据具体需求和业务场景选择合适的数据库技术。
在PHP中,MongoDB是一个广泛使用的NoSQL数据库,它的特点是数据存储格式为JSON-like文档,提供了灵活的数据模型。为了方便地操作MongoDB数据库,开发者通常会编写数据库操作类,如这里的`HMongodb`。这个类提供了对...
在MongoDB中,索引扮演着至关重要的角色,它类似于传统的关系型数据库,通过B-Tree数据结构加速数据查找和排序。 ### 一、索引简介 MongoDB 的索引可以通过`ensureIndex()`函数创建,指定一个或多个字段来提升查询...
1. 建立留言表:在MongoDB中,创建一个名为`messages`的集合,用于存储留言数据,字段可能包括`_id`(MongoDB自动生成的ID)、`content`(留言内容)、`username`(用户名)、`timestamp`(时间戳)等。 2. 添加...
索引是数据库性能优化的关键技术之一,本书中对MongoDB的索引创建和管理做了详细说明,包括如何建立单个字段索引、复合索引、地理位置索引等,以及如何通过索引优化查询速度。 聚合工具是MongoDB处理大量数据时的...
在关系型数据库中,我们通常会使用ORM(对象关系映射)框架来简化数据操作,而在MongoDB这样的NoSQL数据库中,虽然没有严格的表格结构,但类似的辅助类也可以提高开发效率。DBHelper类就是这样一个工具,它封装了与...
MongoDB的索引是数据库性能优化的关键因素,与MySQL、Oracle等关系型数据库中的索引原理相似,但具有自身的特性和限制。MongoDB的索引建立在Collection(表)级别,采用B-树数据结构来加速查询和排序操作。 1. 默认...
- **Insert**: 可以使用`insertOne()`或`insertMany()`方法将单个或多个文档插入到集合中。 - **Find**: `find()`方法用于查询集合中的文档。可以使用过滤器、投影和排序来定制查询。此外,`findOne()`返回单个匹配...
对于数据建模,手册中可能会提供一些特定于MongoDB应用的数据建模考虑因素,比如如何在文档之间建立一对一、一对多以及多对多关系。此外,还包括了用于原子操作的数据建模模式,树状结构(包括使用父引用、子引用、...
MongoDB的每个数据库包含多个集合(Collections),每个集合包含多个文档(Documents),这些文档相当于关系型数据库中的行。 在构建GML云存储时,需要关注的关键点包括: 1. **GML云存储数据类型**:在MongoDB...
注重实战,通过实际中的案例为读者讲解使用MongoDB时遇到的各种问题,并给出了解决方案。本书旨在帮助云计算初学者迅速掌握MongoDB数据库,提升读者在云计算实践中的应用和开发能力。同时本书极强的系统性和大量翔实...
MongoDB 的索引类似关系型数据库,MongoDB 可以对某个字段建立索引,可以建立组合索引、唯一索引,也可以删除索引。 MongoDB 没有自动递增或序列特性,当 BSON 对象插入到数据库中时,如果没有提供“_id”字段,...
为什么在 MongoDB 中使用 "Object ID" 数据类型? "ObjectID" 数据类型用于存储文档 id。ObjectID 由四部分组成:时间戳、客户端 ID、客户进程 ID、三个字节的增量计数器。 在 MongoDB 中什么是索引? 索引用于...