2014-02-06 45 views
6

我正在阅读MongoDB数据库参考文档中的manual references部分,但我并不真正了解“解析引用字段的第二个查询”部分。你能给我一个这个查询的例子,所以我可以更好地了解他们在谈论什么。MongoDB - 手册参考示例

“手动引用是指将一个文档的_id字段包含在另一个文档中的做法,然后应用程序可以根据需要发出第二个查询来解析引用的字段。

回答

7

该文档在您所指的手册部分非常明确,其中有关于Database References的部分。在理解这个最重要的部分被包含在页面上的开幕词:

“的MongoDB不支持联接在MongoDB中一些数据规格化或存储有相关数据的文件删除,需要加入。但是,在某些情况下,将相关信息存储在单独的文档中通常在不同的集合或数据库中是有意义的。“

的更多信息,包括你可能选择如何处理与访问您在另一个集合存储数据的话题。

还有就是DBRef规范其没有考虑太多更详细,可以被某些驱动程序中的一种方式,当这些在你的文件被发现,他们将自动检索(扩大)引用文档到当前实现文件。这将通过针对该_id文档的另一个查询来实现“幕后”。

Manual References的情况下,这基本上是说您的文档中只有一个字段具有来自另一个文档的ObjectId。这只与DBRef有所不同,因为永远不会由基本驱动程序实现处理是离开你如何处理任何其他文档的进一步检索让你自己。

在的情况下:

> db.collection.findOne() 

{ 
    _id: <ObjectId>, 
    name: "This", 
    something: "Else", 
    ref: <AnotherObjectId> 
} 

文档中的ref场只不过是一个普通的ObjectId越来越没有什么特别之处。这是什么让你做的是提交自己的查询来获取对象的细节这是指:

> db.othercollection.findOne({ _id: <AnotherObjectId > }) 
{ 
    _id: <ObjectId> 
    name: "That" 
    something: "I am a sub-document to This!" 
} 

记住,所有这一切都在处理通过驱动程序API客户端保留。任何情况下,都不会在服务器上获取其他文档。