[英]How to store XML in MongoDB?
上下文:一种现有系统,它基于以各种形式传递XML(XmlDocument,XDocument / XElement,字符串编码)。 我们正在开发一个新组件,它将与现有系统进行通信,并拥有自己的某种数据存储,用于保存XML以供以后处理。 MongoDB似乎非常适合数据存储,但它没有对XML的原生支持,所以我想知道在MongoDB中处理XML有什么好的选择。
有两种选择可以想到:
1.使用XML到JSON转换器(双向转换)
我相信这将允许查询MongoDB索引上的数据和创建。 没有立即需要进行大量的查询或许多不同类型的查询,但我们至少必须做一些基于密钥的检索,并且可能对值有一两个查询是有用的(当然对于保持该选项开放)。
通用的XML-2-JSON转换器是否适合这里,或者MongoDB / BSON转换器会更好?
转换为JSON / BSON有什么特别的缺点吗? 它是否会导致信息丢失,或许元素空间块中的空白可能会被破坏?
2.字符串(或二进制)对XML进行编码并将其存储为BSON字节数组。
优点
缺点
上述两种选择还有其他优缺点吗? 还有其他选择吗? 这是理智的吗?! (例如,有没有比MongoDB更适合这个问题?)
===更新===
一个使用Newtonsoft.Json进行XML到JSON转换的工作演示......
XElement fooElem = XElement.Load("foo.xml");
// Note. I used Formatting.Indented to make the JSON easily readable for debug purposes, otherwise it just adds unnecessary whitespace characters.
string jsonStr = JsonConvert.SerializeXNode(fooElem, Formatting.Indented);
BsonDocument bsonDoc = BsonDocument.Parse(jsonStr);
从那里你可以照常调用MongoDB,例如:
await collection.InsertOneAsync(bsonDoc);
在我的特定情况下,这可能是一个好的/可接受的解决方案,但更一般地说它有转换然后解析JSON字符串的开销,这是不必要的工作。 理想情况下,我们会从XElement直接转到BsonDocument。
你提出了一个很好的观点。 避免在将JSON持久化到MongoDB之前解析JSON的必要性。 您可能已经或可能没有找到解决此一般问题的商业.NET产品(库)。
你是否应该自己实现FWIW,我最近一直在考虑在JSON中使用文档顺序友好的XML通用编码,我认为这种编码是圆形的,有或没有XML命名空间,可能会激发你的灵感。
这是PoC,在我对这个问题的回答中(“xml to json mapping challenge”) :
https://stackoverflow.com/a/35810403/1409653
“HTH,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.