如果有人能回答我的新手MongoDB问题,我将不胜感激。
如果用户指定的_id字段不是唯一的,将会产生什么后果 在DB或集合?在什么范围内,唯一性是必要的 (嵌套对象的范围是什么)?
是否可以为集合中的整个文档更改(替换)_id(及其类型)?
当我作为json对象存储(参见下面的A)或作为带有_id(B)的嵌入文档时,嵌套对象之间的区别(在DB引擎处理中)是什么?
A){book: _id:.. chapters[{json object has not _id},{}]}
B){book: _id:.. chapters[{_id:... },{}]}
是否存在_id和索引或更深层次的差异?
如何将“只是json对象”(不带_id)转换为带有_id的嵌入式文档?
答案 0 :(得分:2)
如果用户分配的_id字段不是唯一的,将会产生什么后果 在DB或集合?在什么范围内,唯一性是真正必要的(和 嵌套对象的范围是什么?)
在任何数据集中,唯一性都非常重要,因为您需要一种通过某种身份识别数据的方法。独特的ID是关键。
定义唯一索引时非常重要。当您尝试在唯一索引中添加重复键时,它将被拧紧。
是否可以为整体更改(替换)_id(及其类型) 集合中的文件?
不能直接使用,您需要将文档数据复制到临时集合,然后使用新的ID将它们重新插入到原始集合中。
嵌套之间有什么区别(在DB引擎的处理中) 我作为json对象存储时的对象(见下文 - A)或as 带有_id(B)的嵌入式文档?
嵌入式对象是mongodb原生支持的对象,引用对象将由代码主要由ODM手动处理(如ruby Mongoid)
由于您提出了不同之处,因此嵌入式文档被视为文档中的另一个字段,因此您可以对其进行查询,您可以将其编入索引并作为文档的一部分返回。
但引用文档完全是一个单独的文档。您不能直接从父文档中查询它,因此索引。相反,您必须编写应用程序逻辑来存储ID并从应用程序手动查询它们。
如何将“只是json对象”(不带_id)转换为嵌入式 带有_id的文件?
你的假设是错误的。嵌入式文档确实有ID。它会在您创建时自动生成。
修改强>
我的假设在这方面是错误的。 Mongodb不会自动为嵌入文档生成ID。但是像Mongoid这样的ODM也会为嵌入式文档生成id。