1

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

无需过多详细介绍,我将尝试解释该应用程序的功能。

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

当然,除了平板电脑,手机还有其他属性,笔记本电脑甚至还有其他属性,比如内存、CPU、显示器尺寸等等。

现在我想要一些我们想要称之为方案的东西:我们定义我们需要保存平板电脑的显示大小、闪存设备的内存大小、处理器类型、处理器速度等。对于手机,我们可能会节省显示尺寸、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"}
}

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

有什么想法吗?

4

3 回答 3

0

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

于 2012-03-30T13:43:14.850 回答
0

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

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

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

或者,您可以将翻译分离到一个单独的集合中,您可以在其中存储翻译键和该键的所有语言的翻译。

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

这完全取决于您的喜好。

于 2012-03-30T14:27:55.160 回答
0

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

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

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

于 2012-03-31T11:25:32.497 回答