MongoDB文档,一对多示例,为什么引用不同?

时间:2016-09-18 17:35:39

标签: mongodb

MongoDB docs显示了一对多关系的示例......

(简称...)

  

与文档参考的模型一对多关系

 // Publisher.
 {
    _id: "oreilly",
    name: "O'Reilly Media",
 }

 // Book.
 {
    _id: 123456789,
    title: "MongoDB: The Definitive Guide",
    publisher_id: "oreilly"
 }

 // Book.
 {
    _id: 234567890,
    title: "50 Tips and Tricks for MongoDB Developer",
    publisher_id: "oreilly"
 }

为什么发布商_id是一个逻辑的,人类可读的名称,而图书_id似乎已生成surrogate keys?

所有_id都不会生成值吗?

在MongoDB中,有时将数据本身用作唯一密钥,有时候不是吗?

如果是这样,我们何时使用普通名称(&#34; mary&#34;,&#34; joe&#34;,&#34; exxon&#34;),我们何时更喜欢生成的值?< / p>

1 个答案:

答案 0 :(得分:1)

  

所有_ids都不会生成值吗?

MongoDB仅在用户未提供时才会自动生成_id。

  

在MongoDB中,有时候将数据本身用作a   唯一的关键,有时不是?

是的,数据可以用作密钥。 _id值必须在集合中是唯一的才能正确标识文档。如果满足上述条件,则可以将文档中的任何参数设置为_id。当_id在集合中不唯一时,将抛出重复键错误。

  

如果是这样,我们何时使用普通姓名(&#34; mary&#34;,&#34; joe&#34;,&#34; exxon&#34;),以及   我们何时更喜欢生成的值?

当没有唯一标识文档的参数(或参数组)时,我们更喜欢生成的_id。例如,使用人名不起作用,因为可能会出现添加具有相同名称的其他人的情况。但是,考虑一本书籍ISBN号,它唯一地标识一本书。这些参数可以用作_id。

附加说明:

  • 自动生成的_id已嵌入时间戳值(可能有用)。
  • 无需担心使用自动生成的_id重复值。
  • 但是,用户指定的_id值可能更具应用程序/域。