📅  最后修改于: 2023-12-03 15:07:44.469000             🧑  作者: Mango
在 Mongoose 中,我们可以使用 populate() 方法来查询关联的数据。populate() 方法用于将引用的文档替换为真正的对象。在本文中,我们将介绍如何在 Mongoose 中查询关系数据。
在 Mongoose 中,有三种关系数据:一对一关系、一对多关系和多对多关系。
一对一关系:一个文档关联另一个文档,每个文档只能有一个关联的文档。
一对多关系:一个文档关联多个文档,每个关联的文档只能有一个主文档。
多对多关系:多个文档可以关联多个文档,每个文档可以有多个关联的文档。
在 Mongoose 中,我们可以使用 ref 属性来定义关系。ref 属性指定要引用的模型名称。
const userSchema = new Schema({
name: String,
friends: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}]
});
在上面的代码中,我们定义了一个用户模型,其中使用 ObjectId 类型的数组 friends 引用了 User 模型。
在 Mongoose 中,我们可以使用 populate() 方法来查询关联的数据。populate() 方法返回一个 Promise,可以使用 then() 和 catch() 方法处理结果。
User.findById(id)
.populate('friends')
.exec(function(err, user) {
if (err) return handleError(err);
console.log(user.friends);
});
在上面的代码中,我们使用 findById() 方法查找一个用户,然后使用 populate() 方法来将该用户的朋友数组(friends)替换为真正的对象。最后,我们使用 exec() 方法来执行查询并处理结果。
在 Mongoose 中,我们可以使用 select() 方法来指定要查询的字段。select() 方法接受一个字符串或一个对象作为参数。
User.findById(id)
.populate('friends', '-email')
.exec(function(err, user) {
if (err) return handleError(err);
console.log(user.friends);
});
在上面的代码中,我们使用 select() 方法指定要查询的字段。使用字符串作为参数可以排除某些字段,使用对象作为参数可以选择要查询的字段。
在 Mongoose 中,我们可以使用 where() 方法来指定查询条件。where() 方法接受一个查询条件对象作为参数。
User.find()
.where('name').regex(/john/i)
.populate('friends')
.exec(function(err, users) {
if (err) return handleError(err);
console.log(users);
});
在上面的代码中,我们使用 where() 方法指定查询条件。在这个例子中,我们使用正则表达式查询用户名中包含“john”的用户,并使用 populate() 方法来获取他们的朋友数组。