📜  Mongoose:深度填充(填充填充字段) - Javascript (1)

📅  最后修改于: 2023-12-03 15:32:57.807000             🧑  作者: Mango

Mongoose:深度填充(填充填充字段) - Javascript

在做Mongoose数据建模的时候,我们经常需要填充其他Collection的字段,例如:一个Blog集合需要填充该Blog作者的用户信息等。简单的填充可以使用Mongoose的populate方法,但对于多层级的填充,就需要使用深度填充方法了。

什么是深度填充?

深度填充是一种填充多层级对象字段的方法,即填充A集合,A集合中的B字段,B字段中的C字段,以此类推。Mongoose有一种内置的深度填充方法,可以方便的实现这个过程。

如何使用深度填充?

首先,我们需要定义好数据模型。在这个例子中,我们有两个集合Blog和User,Blog集合中有一个字段author,存储的是该Blog的作者ID。

const userSchema = mongoose.Schema({
  name: String,
  age: Number
});

const blogSchema = mongoose.Schema({
  title: String,
  author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});

const User = mongoose.model('User', userSchema);
const Blog = mongoose.model('Blog', blogSchema);

接下来,我们需要填充Blog中的author字段。我们可以使用populate方法来填充,但是这样只能填充author字段,不能填充author所对应的User集合中的其他字段。

Blog.findById(id)
  .populate('author')
  .exec((err, blog) => {
    if (err) throw err;
    console.log(blog);
  });

为了实现深度填充,我们需要使用populate方法的链式调用,来填充author所对应的User集合中的其他字段。

Blog.findById(id)
  .populate('author')
  .populate({
    path: 'author',
    populate: {
      path: 'friends',
      model: 'User'
    }
  })
  .exec((err, blog) => {
    if (err) throw err;
    console.log(blog);
  });

如上所示,我们在populate方法中传入了一个对象,其中path属性指定需要填充的字段,populate属性指定需要填充的主键所对应的Collection,即User集合中的friends字段,这个字段同样需要填充。

总结

深度填充是一种非常有用的Mongoose方法,可以帮助我们填充多层级的对象字段,减少开发者的工作量。在使用深度填充时,我们需要使用populate方法的链式调用,来填充多个层级的字段。