我有以下模型:
var followerSchema = new Schema({
id_follower: {type: Schema.Types.ObjectId, ref: 'Users'},
id_post: {type: Schema.Types.ObjectId, ref: 'Posts'}
});
我希望能够找到关注者列表的所有帖子。当我使用 find 时,它当然会多次返回同一个帖子,因为多个用户可以关注同一个帖子。
所以我尝试使用 distinct,但我觉得“填充”之后不起作用。
这是我的代码:
followerModel
.distinct('id_post',{id_follower:{$in:followerIds}})
.populate('id_post')
.sort({'id_post.creationDate':1})
.exec(function (err, postFollowers) {
console.log(postFollowers);
})
它只返回帖子的数组,并且没有填充。
我是 mongoDB 的新手,但根据 mongoose 的文档,“distinct”方法应该返回一个查询,就像“find”方法一样。在查询中,您可以执行“填充”方法,所以我看不出我做错了什么。
我也尝试使用查询的 .distinct() 方法,所以我的代码是这样的:
followerModel
.find({id_follower:{$in:followerIds}})
.populate('id_post')
.distinct('id_post')
.sort({'id_post.creationDate':1})
.exec(function (err, postFollowers) {
console.log(postFollowers);
})
在这种情况下,它可以工作,但是正如在 mongoose 的文档中一样,当您在查询中使用 distinct 方法时,您需要提供一个回调函数,因此在我的日志中我得到了所有错误。一种解决方法是有一个虚拟回调函数,但我想避免这种情况......
有谁知道为什么第一次尝试不起作用?如果通过提供虚拟回调可以接受第二种方法?