2011-10-10 41 views
8

我有一个相当巨大的XML(> 10mb大小& 40+个元素)。目前,我们在Oracle数据库中存储这样的xml,并使用xquery来查询和检索部分xml。这个过程很慢,需要很多db调用。我们正在探索mongodb来存储这个XML并进行查询。 我justed将xml转换为json并加载到mongo集合中,并将巨大的json数据存储在闪存中。它将xml节点存储为嵌套文档。但是,当我查询(使用find)作为最内层元素时,它总是返回整个文档,其中也包含具有不匹配元素值的节点。我期望只有少数节点与给定的节点值相匹配。 让我知道是否有任何最好的方式来存储在mongo数据库这样大的XML文件。还让我知道如何检索具有查询中指定的确切值的内部节点。提前致谢。在MongoDB中存储大型XML

回答

3

有几个事实,你应该记住:

数1 MongoDB中仅返回取决于它是否击中或不整的文件,也没有功能,只返回它的一部分(10 2011年10月),如果你需要过滤,你必须用你自己的代码来实现它。

Number 2-注意elemmatch关键字。它表示只在相同的子文档中搜索一些点击,但不能查看整个文档,因此您可能会在此处感到困惑。

3号码 - 与RDBMS-s相比,你没有正确的策略将你的聚集分为mongo中的集合。所以不同的数据表示可能会解决你的情况

数4 - 尽管3号备注关于“不正确的方式”中,有一种普遍的建议,让您的文件小于10 MB大小

+0

您可以使用投影来获取文档的一部分:https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/ –

10

您是否想过尝试使用最新的XML数据库,比如BaseX(http://basex.org)?它可能会给你更好的结果,特别是如果你之前使用过XQuery。

5

我有同样的问题。在我的情况下,每个XML文件中的顶级节点总是包含一个巨大的小节点列表,所以我最终保存了这些项目。要做到这一点,我写了我自己的xml-to-json命令行工具。我用它将10GB的XML数据转换为JSON,格式为mongoimport