概念:mongo适用于应用模式吗?

时间:2012-03-30 13:20:10

标签: node.js mongodb globalization concept database-relations

我目前负责检查它是否对我们即将在mongo上开发的产品有价值。

没有太多细节,我会尝试解释应用程序的功能。

该应用程序只有“实体”。这些实体是技术性的东西,如手机,电视,笔记本电脑,平板电脑等等。

当然,手机还有其他属性,而不是平板电脑,笔记本电脑甚至还有其他属性,如RAM,CPU,显示器尺寸等。

现在我想要一些我们想称之为方案的东西:我们定义我们需要保存平板电脑的显示尺寸,闪存设备的RAM大小,处理器类型,处理器速度等等。对于手机,我们可能会节省显示尺寸,GSM,Edge,3g,4g,处理器,内存,触摸屏技术,bla bla bla。我想你明白了:)

我想要实现的是,每个“类别”都有一个架构,当系统的一个用户输入一个新产品(假设是新的iphone 4)时,应用程序构建要填写的表单属性。

到目前为止,这听起来不错,不应该是mongo的问题。但是现在我很难找到一个干净的解决方案......

在mongo中建模的属性如下所示:

{
_id: 1234456, name: "Attribute name", type: 0, "description"
}

但该怎么办,如果我需要多种语言的这个属性,比如:

{
en: {name: "Attribute name", type: 0, "description"},
de: {name: "Name des Attributs, type: 0, "Beschreibung"}
}

我还需要确保在英语更新后立即更新german属性,例如当类型从0更改为1时。

有关于此的任何想法吗?

3 个答案:

答案 0 :(得分:0)

mongo数据库中的文档可以在一个update语句中更新其任何或所有属性。没有触发器 - 如果您希望在type属性更改时更新文档,则需要在应用程序逻辑中执行此操作。

答案 1 :(得分:0)

您可以通过多种不同方式解决此问题。

您可以在属性文档中嵌入一系列语言翻译:

{
    _id: 1234, 
    type: 0,
    somethingElse : "foobar",
    translation: [
        "en" : { name: "Attribute name", description : "Description" }
        "de" : { name: "Name des Attributs", description: "Beschreibung" }
    ]
}

或者您可以将翻译分成单独的集合,您可以在其中存储该密钥的所有语言的翻译密钥和翻译。

或者您也可以使用您的模型并通过一次更新来更新多个属性。

这完全取决于您的偏好。

答案 2 :(得分:0)

使用MongoDB,确保文档内或文档之间的逻辑关系(例如,每个描述必须以这五种语言出现)的任务是客户端程序的责任。有些查询可以查找符合或不符合您规范的文档,但数据库本身不会阻止您存储不符合您规范的文档(特殊情况除外)。

MongoDB对关系数据库的优势在于能够随着需求的变化随着时间的推移扩展架构。从性能的角度来看,将更新推送到数据库而不对整个文档进行往返(使用$ set或$ push或其他更新功能)的能力可能会有所帮助,并且能够灵活地在各种复合字段上建立索引可以快速查询

如果我了解您的用例,数据总量将相对较小(几千个文档,每个不超过几KB),因此适用于适度系统的RAM,因此速度很快。但是你将编写客户端逻辑来强加你想要的结构和关系。