const userSchema = new Schema(
{
_id: Schema.Types.ObjectId,
name: String,
posts: [{ type: Schema.Types.ObjectId, ref: "Post" }],
following: [{ type: Schema.Types.ObjectId, ref: "User" }]
}
};
我想从'following'
数组中的所有Users中提取所有帖子,将它们放入一个单独的数组中,对它们进行排序,然后显示前20个。我想知道在游标中还是如果我必须将其加载到内存中。
function createFeed(user) {
User.findOne({ name: user })
.populate({
path: "following",
populate: {
path: "posts"
}
})
//put all the posts into one array
.sort(...) //sort by time created
.limit(...) //only get the newest n posts
.exec((err, result) => {
if (err) console.log("error", err);
console.log("result", //sorted tweets array);
});
};
(我不想过滤“帖子”集合中的所有帖子,以检查它们是否由用户制作,因为这会贵很多)
答案 0 :(得分:1)
您可以在mongoDB中使用distinct
查询
db.User.distinct('following',{})
答案 1 :(得分:0)
如果您尝试使用条件过滤填充,那么您应该这样做:
User.findOne({ name: user })
.populate({
path: 'posts',
match: { user: 'XXX' }
})
更好的方法是使用用户过滤条件查询帖子,然后填充用户详细信息。