猫鼬只找到那些在另一个 collection 中有条目的人
Mongoose find only those who have an entry in another collection
我正在尝试使用 mongoose 在 collection 中查找条目,但我只想要在另一个 collection.
中有条目的条目
更具体地说:
我有一个 collection 'post'
var postSchema = new Schemas({
postedBy:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
postContent: String
});
一个collection'group':
var groupSchema = new Schemas({
name: String,
creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
interes: String,
public: Boolean
});
和一个collection 'groupMember':
var groupMemeberSchema = new Schemas({
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
user:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});
我想要的是从用户所属的组中检索所有 post。
类似于:
groupmembers.find({user: req.user._id}, (err, groupsThatTheUserIn) => {
post.find(({$where: this.group EXIST_IN(groupsThatTheUserIn)}, (err, posts) => {
res.json(posts);
}))
})
但是它们在 mongoose
中没有 exist_in() 函数
要从用户所属的组中检索所有 post,您可以使用聚合框架,其中 $lookup
可供您使用使用单个查询加入相关集合。
例如,运行 以下聚合操作将 return 所需的 posts:
groupmembers.aggregate([
{ "$match": { "user": mongoose.Types.ObjectId(req.user._id) } },
{
"$lookup": {
"from": "posts",
"localField": "group”,
"foreignField": "group",
"as": "posts"
}
},
{
], (err, results) => res.json(results[0].posts))
我正在尝试使用 mongoose 在 collection 中查找条目,但我只想要在另一个 collection.
中有条目的条目更具体地说: 我有一个 collection 'post'
var postSchema = new Schemas({
postedBy:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
postContent: String
});
一个collection'group':
var groupSchema = new Schemas({
name: String,
creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
interes: String,
public: Boolean
});
和一个collection 'groupMember':
var groupMemeberSchema = new Schemas({
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
user:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});
我想要的是从用户所属的组中检索所有 post。 类似于:
groupmembers.find({user: req.user._id}, (err, groupsThatTheUserIn) => {
post.find(({$where: this.group EXIST_IN(groupsThatTheUserIn)}, (err, posts) => {
res.json(posts);
}))
})
但是它们在 mongoose
中没有 exist_in() 函数要从用户所属的组中检索所有 post,您可以使用聚合框架,其中 $lookup
可供您使用使用单个查询加入相关集合。
例如,运行 以下聚合操作将 return 所需的 posts:
groupmembers.aggregate([
{ "$match": { "user": mongoose.Types.ObjectId(req.user._id) } },
{
"$lookup": {
"from": "posts",
"localField": "group”,
"foreignField": "group",
"as": "posts"
}
},
{
], (err, results) => res.json(results[0].posts))