mongodb中链接文档的语法

Posted

技术标签:

【中文标题】mongodb中链接文档的语法【英文标题】:syntax for linking documents in mongodb 【发布时间】:2012-07-13 13:39:18 【问题描述】:

如果我在用户集合中有两个对象:

_id: 1, name: 'foo', workItems: []
_id: 2, name: 'bar', workItems: []

如何将指向 workItem 集合中对象的链接添加到每个用户的 workItems 数组中?

我了解直接嵌入,但某些工作项将分配给多个用户,因此我不想重复数据。我查看了mongodb.org,但找不到任何链接示例。

【问题讨论】:

【参考方案1】:

有时复制数据会更好。 MongoDB 是一个非关系型数据库。一些做事的方式对于关系数据库来说是不好的做法,但打算用于非关系数据库。尽管有明显的共同点,但这确实不是同一种思维方式。

在我的工作中,我们在生产环境中使用它,发现读取操作复制数据更容易、更快捷。这正是 MongoDB 的强大之处。 当然,当一个工作项被修改时,这需要你的应用程序更新它出现的所有地方......这对于写密集型系统来说可能不是一个好的解决方案。

另一点是引擎不处理关节,因此您必须至少发出第二个请求。然后,您必须在应用程序端手动进行连接。无论哪种方式,您都必须将逻辑从数据库移动到客户端应用程序。

【讨论】:

【参考方案2】:

你可以像这样做一个 DBRef:

 $ref : <name of collection where reference is>, $id : <_id of document>, $db : <optional argument for specifying the databse the document is at> 

所以你的文档应该是这样的:

_id: 1, name: 'foo', workItems: $ref: "blarg", $id: "1"

【讨论】:

或者,您可以只将每个工作项的 _ids 或其他一些唯一标识符存储在数组中 - 链接可以是“逻辑的”。 确切地说,要澄清 Aysa 的答案,您可以进行多个查询。 正如 jtlebi 所说 - 你必须进行两次查询,你不妨让它可读。 谢谢,这就是我一直在寻找的东西,这是有道理的,我试图想出一些“神奇”的方式来链接数据,而不仅仅是指定集合和文档 _id。感谢其他 cmets 和 jtlebi 的回答,这也是一个很好的答案。

以上是关于mongodb中链接文档的语法的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB的常用语法

MongoDB——文档操作(查询文档)

MongoDB 删除文档

基于查询语法未使用子文档的 MongoDB 索引

MongoDB 查询文档

mongodb怎么插入多个文档