【发布时间】:2015-10-31 23:12:51
【问题描述】:
我对 mongoDB 很陌生,正在尝试将对象插入数据库。 (哇,比 mySQL 有趣多了……)。我正在使用 strongloop 的环回框架及其 mongoDB 连接器。
该对象是我收到的一个 xml2js 解析的 xml 消息,在解析并插入到 mongo 之后,它看起来像这样:
{
"_id": ObjectID("55c61ee9391da88435c5753f"),
"offerChange": [
{
"foo": [
"bar"
],
"baz": [
"foo"
]
}
]
}
如您所见,所有键的值都是数组,尽管它们都只包含一个值。显然,我可以在插入之前或在 xml 解析期间将它们转换为字符串,但这需要循环遍历所有对象的键或首先为工作人员做更多工作,这是我想避免的。实物比上面显示的要大得多。
有没有办法告诉 mongoDB 在创建文档之前或之后自动将只有一个值的数组转换为字符串?
【问题讨论】:
-
这不是一个明智的主意。就“对象一致性”而言,最好将它们保留为数组,即使它们只包含一个条目。为什么?考虑在代码中定义一个对象。你给这个领域什么“类型”。 “数组还是字符串?”。现在对有效性检查没有多大意义吗?虽然 MongoDB 文档是无模式的,并且没有什么可以阻止您更改文档之间的结构,但您不应该这样做(以一种明确的“继承模式”之外的方式)。因此,“建议”真正保持这种状态。
-
也就是说,如果您的 only 问题是 XML 翻译器处理您 only 想要作为单一值的事物的相当“古怪”的方式,然后通过您当前使用的特定代码在您的问题中明确说明这一点,我或其他人会建议对此进行“修复”,以便您每次都获得一个奇异值。
-
@BlakesSeven 不,实际上我认为您的第一条评论非常合理,我想我会保留它。
-
我在这里提出的主要观点是假设它只是
{ "foo": "bar" }而不是数组。那么,如果除了“bar”之外,还想将“baz”分配给“foo”属性,会发生什么?这会破坏逻辑和简单的更新。但是有了{ "foo": ["bar"] },更新是对已经存在的数组的简单$push操作。哪个产生{ "foo": ["bar","baz"] }。这就是我希望你考虑的,我希望你也有。 -
+1 布莱克七号的回答。如果您确实需要将值作为字符串,请在需要时将其转换以保持您的 CRUD 操作一致。
标签: javascript node.js mongodb loopbackjs