对于first pattern example of Mongodb Model One-to-Many Relationships with Document References -
我对发布商book
的{{1}}数组字段创建多键索引有一些疑问:
出于学习目的,我将在未来假装图书数组仅增加最多 5个元素,因此我想仅关注此模式使用数组:
当我将一个objectId添加到book数组时,它会自动索引新元素吗?
当我创建O'Reilly Media
时,我想制作吗?
背景为true,因此当我添加到书籍时它不会阻止
在后来的数组中,它会为新值编制索引吗?
db.publishers.createIndex(books)
值为false。我很困惑
这是因为我不知道MongoDb索引的内部工作原理。
unique
数组上的唯一值不一定是真的吗?books
,我为什么要使用它,为什么设置为false?该
sparse
数组已经是指定字段。我假设如果我稍后修改书籍文件就不会生效 写入性能,因为它的objectId之前已被索引 出版商书籍数组,对吗?
books
答案 0 :(得分:1)
null
值也是唯一值。因此,如果没有出版图书,您就不可能有两个出版商。null
条目就会浪费RAM。如今,部分索引是首选,它提供与稀疏诱导相同的功能,然后是一些。完全错了。索引 - 大大简化 - 除了索引字段的寄存器和数据文件中相应文档的位置之外别无其他。对于books数组,这将是包含索引值的发布者文档。同样,它不是被索引的书籍文件,而是包含对书籍文件的引用的字段。书籍字段被编入索引的原因是,对于给定的书籍,可以更快地找到出版商:
db.publishers.find({books:someBookId})
编辑图书文档时,您首先必须找到它并应用最终需要同步到磁盘的更改(甚至是之前的日志)。索引不会神奇地消除持久化数据的需要。