您所指的手册部分中的文档非常清楚,这是关于数据库参考 http://docs.mongodb.org/manual/reference/database-references/。理解这一点最重要的部分包含在该页面的开场白中:
“MongoDB 不支持联接。在 MongoDB 中,某些数据是非规范化的,或者与文档中的相关数据一起存储,以消除联接的需要。但是,在某些情况下,将相关信息存储在单独的文档中是有意义的,通常是在不同的集合或数据库中”。
进一步的信息涵盖了您如何might选择处理访问存储在另一个集合中的数据。
有的是DBRef http://docs.mongodb.org/manual/reference/database-references/#dbref规范,无需详细说明,may在某些驱动程序中实现的方式是,当在文档中找到这些文档时,它们会自动将引用的文档检索(扩展)到当前文档中。这将通过对该集合的另一个查询来“在幕后”实现该 _id 的文档。
如果是手册参考 http://docs.mongodb.org/manual/reference/database-references/#document-references这基本上是说,您的文档中只有一个字段,其内容为ObjectId来自另一个文档。这只与 DBRef 不同,因为它会never由基本驱动程序实现处理将如何处理其他文档的任何进一步检索完全取决于您。
如果是:
> db.collection.findOne()
{
_id: <ObjectId>,
name: "This",
something: "Else",
ref: <AnotherObjectId>
}
The ref
文档中的字段只不过是一个普通的 ObjectId,没有什么特殊的作用。这允许您做的是提交您自己的查询来获取它所引用的对象详细信息:
> db.othercollection.findOne({ _id: <AnotherObjectId > })
{
_id: <ObjectId>
name: "That"
something: "I am a sub-document to This!"
}
请记住,所有这些过程都是通过驱动程序 API 在客户端进行的。无论如何,服务器上都不会发生获取其他文档的情况。