Mongoose 只查找那些在另一个集合中有条目的人
Posted
技术标签:
【中文标题】Mongoose 只查找那些在另一个集合中有条目的人【英文标题】:Mongoose find only those who have an entry in another collection 【发布时间】:2018-07-28 22:25:38 【问题描述】:我正在尝试使用 mongoose 在集合中查找条目,但我只想要在另一个集合中有条目的条目。
更具体地说: 我有一个收藏“帖子”
var postSchema = new Schemas(
postedBy:type: mongoose.Schema.Types.ObjectId, ref: 'User',
group:type: mongoose.Schema.Types.ObjectId, ref: 'Group',
postContent: String
);
一个集合'组':
var groupSchema = new Schemas(
name: String,
creator:type: mongoose.Schema.Types.ObjectId, ref: 'User',
interes: String,
public: Boolean
);
还有一个集合'groupMember':
var groupMemeberSchema = new Schemas(
group:type: mongoose.Schema.Types.ObjectId, ref: 'Group',
user:type: mongoose.Schema.Types.ObjectId, ref: 'User'
);
我想要的是从用户所属的组中检索所有帖子。 比如:
groupmembers.find(user: req.user._id, (err, groupsThatTheUserIn) =>
post.find(($where: this.group EXIST_IN(groupsThatTheUserIn), (err, posts) =>
res.json(posts);
))
)
但是它们在 mongoose 中是没有 exists_in() 函数的
【问题讨论】:
【参考方案1】:要从用户所属的组中检索所有帖子,您可以使用聚合框架,其中 $lookup
可以通过单个查询加入相关集合。
例如,运行以下聚合操作将返回所需的帖子:
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))
【讨论】:
非常感谢。事实上,他们不需要加入“群”、“帖子”单独完成这项工作。 @davdsb 你是绝对正确的,会更新我的答案以上是关于Mongoose 只查找那些在另一个集合中有条目的人的主要内容,如果未能解决你的问题,请参考以下文章