0

我正在尝试了解 mongodb 的工作原理,但我有一些问题。

我了解如何删除、插入、更新和选择,但我有一些“最佳实践问题”

1)我们必须创建一个索引还是我们可以使用自动生成的_id?

2)如果我有例如 2 种对象(汽车和司机)之间有 nn 关系。我必须获得 3 个收藏品(汽车、司机和一个收藏女巫,将两者联系起来)?

3) 要重建我的对象,我必须用 JSON 对象解析我的 json 吗?

谢谢你的帮助

4

1 回答 1

2

三个好问题。我会逐一回答。

1)我们必须创建一个索引还是我们可以使用自动生成的_id?

您绝对应该尝试并(重新)使用_id索引。这通常意味着将域对象中的一个唯一字段(或 RDMS 中的主键)移动到该_id字段。如果要进行分片,您必须小心该字段不会变大,但这是一个单独的问题需要回答。

2)如果我有例如 2 种对象(汽车和司机)之间有 nn 关系。我必须获得 3 个收藏品(汽车、司机和一个收藏女巫,将两者联系起来)?

不!你只需要两个集合。一辆给汽车,一辆给司机。“连接表”作为DBRefs被拉入每个集合。

每个汽车文档将包含一组 DBRef 或文档引用。这些引用包含数据库名称(可选)、集合名称和_id驱动程序文档。您将在每辆驾驶汽车的驱动程序文档中拥有一组类似的 DBRef。

大多数驱动程序都支持创建和取消引用这些文档引用。

3) 要重建我的对象,我必须用 JSON 对象解析我的 json?

MongoDB lingua franca 实际上是 BSON。您可以将 BSON 视为 JSON 的类型化、二进制、易于解析的版本。大多数驱动程序都有一些能力将 JSON 转换为 BSON 的表示并返回。如果您使用 Java 进行开发,那么 10gen 驱动程序的实用程序类是JSON。对于异步驱动程序,它称为Json

话虽如此,除非您的数据已经是 JSON,否则我不会将您的数据转换为 JSON 以将其转换为 BSON 并再次转换回来。相反,要么为您选择的语言寻找 ODM(对象-文档-映射器),要么直接将您的域对象转换为驱动程序的 BSON 表示。

HTH-罗布。

于 2013-04-28T13:56:48.240 回答