当前位置: 首页 > news >正文

县区组织部12380网站建设金堂县城乡建设局网站

县区组织部12380网站建设,金堂县城乡建设局网站,企业网站制作一般多少钱,软件编程自学网mongodb存储数据继续使用MongoDB进行 NoSQL之旅#xff0c;我想谈一谈一个经常出现的特定用例#xff1a;存储分层文档关系。 MongoDB是很棒的文档数据存储#xff0c;但是如果文档具有父子关系#xff0c;该怎么办#xff1f; 我们可以有效地存储和查询此类文档层次结构吗… mongodb存储数据 继续使用MongoDB进行 NoSQL之旅我想谈一谈一个经常出现的特定用例存储分层文档关系。 MongoDB是很棒的文档数据存储但是如果文档具有父子关系该怎么办 我们可以有效地存储和查询此类文档层次结构吗 肯定的答案是我们可以。 MongoDB对如何在MongoDB中存储树提出了一些建议。 那里描述的并且被广泛使用的一种解决方案是使用物化路径。 让我通过提供非常简单的示例来解释其工作原理。 如前几篇文章所述我们将使用最近发布的Spring Data MongoDB项目的1.0版来构建Spring应用程序。 我们的POM文件包含非常基本的依赖关系仅此而已。 4.0.0mongodbcom.example.spring0.0.1-SNAPSHOTjarUTF-83.0.7.RELEASEorg.springframework.dataspring-data-mongodb1.0.0.RELEASEorg.springframeworkspring-beansorg.springframeworkspring-expressioncglibcglib-nodep2.2log4jlog4j1.2.16org.mongodbmongo-java-driver2.7.2org.springframeworkspring-core${spring.version}org.springframeworkspring-context${spring.version}org.springframeworkspring-context-support${spring.version}org.apache.maven.pluginsmaven-compiler-plugin2.3.21.61.6 为了正确配置Spring上下文我将使用利用Java类的配置方法。 我越来越提倡使用这种样式因为它提供了强大的类型化配置并且大多数错误都可以在编译时发现而无需再检查XML文件。 这里看起来像 package com.example.mongodb.hierarchical;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoFactoryBean; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory;Configuration public class AppConfig {Beanpublic MongoFactoryBean mongo() {final MongoFactoryBean factory new MongoFactoryBean();factory.setHost( localhost );return factory;}Beanpublic SimpleMongoDbFactory mongoDbFactory() throws Exception{return new SimpleMongoDbFactory( mongo().getObject(), hierarchical );}Beanpublic MongoTemplate mongoTemplate() throws Exception {return new MongoTemplate( mongoDbFactory() );}Beanpublic IDocumentHierarchyService documentHierarchyService() throws Exception {return new DocumentHierarchyService( mongoTemplate() );} } 很好很清楚。 谢谢 春天的家伙 现在所有样板文件已准备就绪。 让我们转到有趣的部分文档。 我们的数据库将包含“文档”集合其中存储了SimpleDocument类型的文档。 我们使用用于SimpleDocument POJO的Spring Data MongoDB批注对此进行描述。 package com.example.mongodb.hierarchical;import java.util.Collection; import java.util.HashSet;import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field;Document( collection documents ) public class SimpleDocument {public static final String PATH_SEPARATOR .;Id private String id;Field private String name;Field private String path;// We wont store this collection as part of document but will build it on demandTransient private Collection SimpleDocument documents new HashSet SimpleDocument ();public SimpleDocument() {}public SimpleDocument( final String id, final String name ) {this.id id;this.name name;this.path id;}public SimpleDocument( final String id, final String name, final SimpleDocument parent ) {this( id, name );this.path parent.getPath() PATH_SEPARATOR id;}public String getId() {return id;}public void setId(String id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getPath() {return path;}public void setPath(String path) {this.path path;}public Collection SimpleDocument getDocuments() {return documents;} } 让我在这里解释几件事。 首先魔术属性路径 这是构建和查询层次结构的关键。 路径包含所有文档父级的标识符通常以某种分隔符在我们的情况下为分隔。 点 。 以这种方式存储文档层次结构关系可以快速构建层次结构进行搜索和导航。 其次注意临时文档集合此非持久集合由持久提供者构造并包含所有后代文档以防万一还包含自己的后代。 让我们通过查找find方法实现来实际观察它 package com.example.mongodb.hierarchical;import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map;import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query;public class DocumentHierarchyService {private MongoOperations template;public DocumentHierarchyService( final MongoOperations template ) {this.template template;}Overridepublic SimpleDocument find( final String id ) {final SimpleDocument document template.findOne(Query.query( new Criteria( id ).is( id ) ),SimpleDocument.class);if( document null ) {return document;}return build(document,template.find(Query.query( new Criteria( path ).regex( ^ id [.] ) ),SimpleDocument.class));}private SimpleDocument build( final SimpleDocument root, final Collection SimpleDocument documents ) {final Map String, SimpleDocument map new HashMap String, SimpleDocument ();for( final SimpleDocument document: documents ) {map.put( document.getPath(), document );}for( final SimpleDocument document: documents ) {map.put( document.getPath(), document );final String path document.getPath().substring( 0, document.getPath().lastIndexOf( SimpleDocument.PATH_SEPARATOR ) );if( path.equals( root.getPath() ) ) {root.getDocuments().add( document );} else {final SimpleDocument parent map.get( path );if( parent ! null ) {parent.getDocuments().add( document );}}}return root;} } 如您所见要获得具有整个层次结构的单个文档我们只需要运行两个查询但是更优化的算法可以将其缩减为一个查询。 这是一个示例层次结构以及从MongoDB读取根文档的结果 template.dropCollection( SimpleDocument.class );final SimpleDocument parent new SimpleDocument( 1, Parent 1 ); final SimpleDocument child1 new SimpleDocument( 2, Child 1.1, parent ); final SimpleDocument child11 new SimpleDocument( 3, Child 1.1.1, child1 ); final SimpleDocument child12 new SimpleDocument( 4, Child 1.1.2, child1 ); final SimpleDocument child121 new SimpleDocument( 5, Child 1.1.2.1, child12 ); final SimpleDocument child13 new SimpleDocument( 6, Child 1.1.3, child1 ); final SimpleDocument child2 new SimpleDocument( 7, Child 1.2, parent );template.insertAll( Arrays.asList( parent, child1, child11, child12, child121, child13, child2 ) );...final ApplicationContext context new AnnotationConfigApplicationContext( AppConfig.class ); final IDocumentHierarchyService service context.getBean( IDocumentHierarchyService.class );final SimpleDocument document service.find( 1 ); // Printing document show following hierarchy: // // Parent 1 // |-- Child 1.1 // |-- Child 1.1.1 // |-- Child 1.1.3 // |-- Child 1.1.2 // |-- Child 1.1.2.1 // |-- Child 1.2 而已。 简单一个强大的概念。 当然在路径属性上添加索引将大大加快查询速度。 有很多改进和优化但是基本思想现在应该很清楚。 参考在Andriy Redko {devmind}博客上由我们的JCG合作伙伴 Andrey Redko 在MongoDB中存储分层数据 。 翻译自: https://www.javacodegeeks.com/2012/01/storing-hierarchical-data-in-mongodb.htmlmongodb存储数据
http://www.zqtcl.cn/news/495744/

相关文章:

  • 手机网站使用微信支付神级网页设计网站
  • 网站建站大约多少钱如何引流被动加好友
  • 哪些网站可以查企业信息大城县有做网站的吗
  • 上海网站建设电影联wordpress 分类title
  • 杭州网站建设招标免费seo排名优化
  • 网站建设服务费是否无形资产百度一下你就知道官网下载安装
  • 网站付款链接怎么做在线设计商标logo
  • 阿里巴巴做网站多少钱特大新闻凌晨刚刚发生
  • 网站如何做se设计师网站pintset
  • 上海网站制作机构wordpress 优酷免广告
  • 关于网站建设的名言网站开发的技术难点
  • 免费云建站廊坊seo外包
  • 个人网站建设方案书用备案的衡水市网站制作
  • 教育网站的建设品牌营销型网站作用
  • 金凤区建设交通局网站做洗衣液的企业网站
  • 南阳网站优化手机咋做网站
  • 做网站多少钱一年没有网站做cpa怎么赚钱
  • 二手房发布网站怎么做建站哪家好用兴田德润
  • 网站开发有几种深圳网站制作长沙
  • 为什么一个网站外链那么多公司团建活动
  • 公司门户网站建设策划书wordpress清空数据
  • 大兴专注高端网站建设交互设计留学
  • 想要黑掉一个网站 要怎么做网页设计师培训机构有吗
  • 做网站网站应该注意什么关于建设网站的会议纪要
  • 什么网站建设最简单做毕业设计实物的网站
  • 正规网站开发文案电商网站与企业网站区别
  • 襄阳做网站比较有实力的公司长沙出名的网站设计推广
  • 徐州网站设计师最便宜的购物平台
  • 网站域名和空间费用wordpress是是什么技术
  • 企业制作网站一般多少钱上海网站制作费用