在使用 Mongoose 进行开发时,多表查询是必不可少的。Mongoose 提供了 populate 方法来时实现多表查询,它可以将一个 Schema 中的属性与其它 Schema 中的属性关联起来,从而方便查询多个表中的数据。
什么是 population
在 MongoDB 中,一个 document 可以包含另一个 document 的 ObjectId,这样就可以通过引用(reference)的方式关联两个 document。比如,一篇博客文章可以包含其作者的 ObjectId,并保存在 author
属性中:
----- ---------- - --- ----------------- ------ ------- -------- ------- ------- - ----- ------------------------------- ---- -------- - --
其中,ref
属性指定了关联的文档类型,这里是 Author
。但是,当我们查询这个 Schema 时,仅仅得到了一个 ObjectId,而不是关联的文档。这时,我们需要使用 populate
方法来获取完整的文档。
populate 用法
populate
方法可以在查询一个 Schema 时,将关联的属性填充成完整的文档。下面是一个示例:
-------------- ------ --- ---- ----- -- ------------------- ----------- ----- -- - ----------------------------- -- ----- ---- --
在这个例子中,我们查找博客文章并使用 populate
方法填充 author
属性。这就意味着当我们访问 blog.author
时,我们将得到一个完整的 Author
文档,而不仅仅是一个 ObjectId。
populate
方法可以使用链式调用指定多个关联字段:
-------------- ------ --- ---- ----- -- ------------------- --------------------- ----------- ----- -- - ----------------------------- -- ----- ---- ------------------------------------- -- ------ ------ --
深层 populate
如果我们需要访问关联文档的属性,而这些属性又关联到其它文档,我们可以使用深层 populate。下面是一个示例:
-------------- ------ --- ---- ----- -- ----------- ----- --------- --------- - ----- ---------- ------ -------- - -- ----------- ----- -- - ---------------------------------------- -- ----- ---- --
在这个例子中,我们首先填充 author
属性,然后使用 populate
再次填充它的 friends
属性。注意,我们需要指定 model
属性来告诉 Mongoose 需要填充哪个模型。
总结
在本文中,我们介绍了 Mongoose 的 populate
方法,它可以帮助我们在多个表中查询数据。我们还使用示例代码演示了如何使用 populate
来填充关联属性和访问嵌套文档。通过理解和掌握 populate
方法的使用,我们可以更加方便地进行多表查询,提高开发效率。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64f1cca8f6b2d6eab3ba1ee7