数组在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吧 ->:)!
相关推荐
sift.js, 使用mongodb查询筛选数组 使用mongodb查询验证对象的&筛选器数组 扩展文档 checkout http://docs.mongodb.org/manual/reference/operator/query/插件功能:Support
注意:作者使用的mongodb版本为2.4.7。 首先插入测试数据 代码如下:db.data.insert({name:’a’, num:[12,123,22,34,1]});db.data.insert({name:’b’, num:[42,22]});db.data.insert({name:’c’, num:[49]}); 键...
相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组。MongoDB的数组是一系列元素的集合,使用中括号 [] 表示数组,例如:[1,2,3]的元素是整数值,[{name:”t5″}, {name:”t7″}]...
主要介绍了Thinkphp使用mongodb数据库实现多条件查询方法,修改了mongodb驱动文件来实现复合查询、多条件查询,需要的朋友可以参考下
本文介绍了mongodb如何对文档内数组进行过滤的方法步骤,分享给大家,具体如下: mongodb文档内包含数组,需要将数组中符合条件的数据过滤出来并返回结果集,可以用两种方式来查询group或filter。 数据源: { ...
mongodb在计算集合数组值时候,我们通常会想到使用$group与$sum,但是如果是数组里面多个json对象,并且还需要根据条件过滤多个对象的内容该如何处理? 现在让我们来实现它,假设mongodb中有个user集合,其数据内容...
MongoDB的数组查询操作符.pdf 学习资料 复习资料 教学资源
nodejs_withMongoRefArray mongodb nodejs引用数组使用的数据库:Mongodb API端点: GET and POST / api /类别/ api /游戏/ api /用户
本资料是在线教育课程第一天中使用的mongoDB的安装资料以及使用指南
MongoDB数组与文档查询.pdf 学习资料 复习资料 教学资源
MongoDB数组更新操作符.pdf 学习资料 复习资料 教学资源
spring data mongodb的demo程序,参考App.java中的调用方法,mongodb配置文件在resources目录下,整个项目使用maven,适合初学者学习。
在MongoDB中,不强调一定对数据进行Normalize ,很多场合都建议De-normalize,开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection,只需定义最顶级的class。MongoDB的文档...
MongoDB实现增删改查,java程序驱动,复杂查询,源代码示例
2,统计每个文档的数组字段里面的各个数据值的和。这两种情况都可以通过$sum表达式来完成。 以上两种情况的聚合统计,分别对应与聚合框架中的 $group 操作步骤和 $project 操作步骤。 1.$group 直接看例子吧。 Case ...
Spring Data MongoDB中文文档 便宜下载了。
3、MongoDB多对多关系型 4 三、创建数据库(mongodb_test) 4 四、MongoDB得增删改查(crud) 4 1、MongoDB查询 4 2、order和投影查询 5 3、MongoDB增加 6 4、MongoDB修改 7 5、MongoDB删除 9 6、MongoDB分页 10 7、...
Spring Data MongoDB 中文参考文档和Springboot使用例子,其中还介绍了spring-data-mongodb 如何使用mongodb的全文检索。