没有AutoIncrement的MongoDB / NoSQL关系?

时间:2014-01-09 12:54:57

标签: mongodb nosql

所以MongoDB不支持自动增量用于扩展目的。

我的问题是我将如何用于约束?

我应该使用Object-id作为查找内容的约束吗?这不是很慢吗? (这是一个12-BYTE字段!)

我应该使用唯一键作为一种“主键”吗?例如Books.find('actual-author-name')?这会更快吗?

基本上,这样做的一般/可接受的方式是什么?

3 个答案:

答案 0 :(得分:1)

如果您已有合适的密钥,请将其用作_id字段以用于集合之间的关联。你也可以依赖12字节字段,因为它并不是那么多。还请检查是否更容易使用嵌入式文档以避免必须将所有链接连接在一起 - 这通常是MongoDB等文档数据库中的首选解决方案。

答案 1 :(得分:1)

可以使用自动递增字段。请参阅MongoDB文档中的以下代码:

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#a-counters-collection

这是对广泛问题的基于意见的回答,我给你的代码使用另一个集合来完成它的工作,但我的观点是,你可以做自动递增字段。

答案 2 :(得分:0)

自动增量点通常是自动生成保证唯一的键值。

MongoDB ObjectID可以通过不仅对集合是唯一的,甚至全局唯一的来完成这个角色。它们也按升序排列,因为它们以当前时间戳开头。

不保证它们是连续的,但SQL数据库中的自动增量列也不是,因为当您删除记录时,该ID将不会被重用。

请注意,MongoDB的_id字段不一定需要是ObjectID。您还可以向其中提供任何其他数据。因此,当您的数据集已经具有唯一标识符时,您可以通过在插入文档之前手动填充_id来使用这些标识符。 _id字段甚至不必是原始值。它甚至可以是一个对象。所以你可以有这样的多字段主键:

_id: { first_name = "John", last_name = "Smith" }