在mongoose中查找另一个集合中的集合,可以使用以下几种方法:
const UserSchema = new mongoose.Schema({
name: String,
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
const PostSchema = new mongoose.Schema({
title: String,
content: String
});
const User = mongoose.model('User', UserSchema);
const Post = mongoose.model('Post', PostSchema);
User.findOne({ name: 'John' })
.populate('posts')
.exec(function(err, user) {
if (err) throw err;
console.log(user);
});
这里的populate('posts')
表示填充User
模型中的posts
字段,将关联的Post
模型中的文档信息添加到查询结果中。
User.aggregate([
{
$lookup: {
from: 'posts',
localField: 'posts',
foreignField: '_id',
as: 'postsData'
}
}
])
.exec(function(err, users) {
if (err) throw err;
console.log(users);
});
这里的$lookup
操作符指定了要查找的集合posts
、本地字段posts
和外部字段_id
的关联关系,并将结果保存在postsData
字段中。
const UserSchema = new mongoose.Schema({
name: String,
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
const PostSchema = new mongoose.Schema({
title: String,
content: String
});
const User = mongoose.model('User', UserSchema);
const Post = mongoose.model('Post', PostSchema);
User.findOne({ name: 'John' })
.populate('posts')
.exec(function(err, user) {
if (err) throw err;
console.log(user);
});
这里的ref: 'Post'
指定了关联的模型为Post
,可以直接在查询时使用populate()方法进行填充。
综上所述,以上是在mongoose中查找另一个集合中的集合的几种方法。具体选择哪种方法取决于数据结构和业务需求。如果需要在查询结果中一起返回关联集合的数据,可以使用populate()方法;如果需要执行更复杂的聚合操作,可以使用aggregate管道;如果在定义模型时已经指定了关联的模型,可以直接使用populate()方法进行填充。
领取专属 10元无门槛券
手把手带您无忧上云