Mongo多个Collection的关联操作实现

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在mysql,oracle等关系型数据库中,可以通过表之间的关联操作(join, left join, and)实现字段之间的关联操作。而在mongo非关系型数据库中没有对应的接口。为此,我们自身实现了1个Mongo db库中的多个collection之间的类笛卡尔操作。

题记

在mysql,oracle等关系型数据库中,可以通过表之间的关联操作(join, left join, and)实现字段之间的关联操作。
而在mongo非关系型数据库中没有对应的接口。
为此,我们自身实现了1个Mongo db库中的多个collection之间的类笛卡尔操作。(这种需求,多少有些不合理)

1、需求:Mongo多个Collection之间的关联操作

输入: gatherList,
组成如下:

List <Object> la = Arrays.asList (new Object [] {'A', 'B', 'C', 'D'}); //1
List <Object> lb = Arrays.asList (new Object [] {1, 2, 3, 4}); //2
List <Object> lc = Arrays.asList (new Object [] {"百度", "小米", "谷歌", "Facebook"}); //3
List <Object> ld = Arrays.asList (new Object [] {"雷军", "乔布斯", "罗永浩", "罗胖子"}); ///4
List <Object> le = Arrays.asList (new Object [] {"微博", "微信", "陌陌", "脉脉"}); //5

List <List <Object>> gatherList = new ArrayList <List <Object>> ();
gatherList.add(la);
gatherList.add(lb);
gatherList.add(lc);
gatherList.add(ld);
gatherList.add(le);

输出: CartesianIterable dkRst

CartesianIterable dkRst = CartesianIteratorTest.dk_process_obj(gatherList);

原理:合集处理——笛卡尔迭代器实现,逐个遍历元素,形成一个笛卡尔集合。
参考:http://stackoverflow.com/questions/714108/cartesian-product-of-arbitrary-sets-in-java

2、关联结果入Mongodb。

void mongoInsertObj(CartesianIterable dkRst, 
List labelNameList, int iGatherListSize) 
输入:1) CartesianIterable dkRst, 笛卡尔结果。 
2) List labelNameList,列名称集。 
3) int iGatherListSize, 笛卡尔结果的组数,即 gatherList集的大小,等同于 列名称集的大小。 
输出:空。 
算法实现:集合拆分——以 gatherList集的大小为一组,对应一个document入库。 
源码:

public static void mongoInsertObj(CartesianIterable<Object> dkRst,
List<String> labelNameList, int iGatherListSize)
throws UnknownHostException {
try {
/**** Connect to MongoDB ****/
// Since 2.10.0, uses MongoClient
MongoClient mongo = new MongoClient("110.20.12.41", 27017);

/**** Get database ****/
// if database doesn't exists, MongoDB will create it for you
DB db = mongo.getDB("data");

/**** Get collection / table from 'testdb' ****/
DBCollection table = db.getCollection(testCollName);
for (List <Object> lo: dkRst){
int iObjSize = lo.size();
BasicDBObject document = new BasicDBObject();
for (int i = 0; i < iObjSize; i+=iGatherListSize) {
//System.out.println("NtnbRisk.labelNameList[0] = " + NtnbRisk.labelNameList[0]);
for (int j = 0; j < iGatherListSize; j++) {
// create a document to store key and value
document.put(labelNameList.get(j), lo.get(i+j)); //1
}
table.insert(document);
}
}

http://stackoverflow.com/questions/714108/cartesian-product-of-arbitrary-sets-in-java

3、结果如下

数据集合的大小为:44444=1024;

image.png

image.png


作者:铭毅天下
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/70946468

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL Cloud Native MongoDB
mongo 聚合操作
mongo 聚合操作
|
关系型数据库 MySQL 数据库
数据的移除与删除:探究MySQL中的DELETE操作
在数据库管理中,删除不再需要的数据是一项重要任务,"DELETE"语句正是用于实现这一目标的命令。通过DELETE操作,我们可以从数据库表中移除数据记录。
528 0
|
JavaScript NoSQL 关系型数据库
mongo 详解修改操作
在mongo中的数组操作是不同的,会有专门的指令来进行修改.
mongo 详解修改操作
|
存储 NoSQL 关系型数据库
MongoDB(4)- Collection 集合相关
MongoDB(4)- Collection 集合相关
167 0
MongoDB(4)- Collection 集合相关
|
NoSQL 算法 Oracle
Mongo多个Collection的关联操作实现
题记 在mysql,oracle等关系型数据库中,可以通过表之间的关联操作(join, left join, and)实现字段之间的关联操作。 而在mongo非关系型数据库中没有对应的接口。 为此,我们自身实现了1个Mongo db库中的多个collection之间的类笛卡尔操作。(这种需求,多少有些不合理)
371 0
Mongo多个Collection的关联操作实现
|
存储 SQL NoSQL
MongoDB:2-MongoDB的基本命令(insert、delete、find、update)
MongoDB:2-MongoDB的基本命令(insert、delete、find、update)
203 0