У меня есть следующая модель:
var followerSchema = new Schema({
id_follower: {type: Schema.Types.ObjectId, ref: 'Users'},
id_post: {type: Schema.Types.ObjectId, ref: 'Posts'}
});
Я хочу, чтобы найти все записи для списка подписчиков. Когда я использую find, он возвращает мне, конечно, несколько раз одну и ту же запись, поскольку несколько пользователей могут следить за тем же сообщением.
Итак, я попытался использовать разные, но у меня такое ощущение, что после этого "populate" не работает.
Вот мой код:
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, "отличный" метод должен возвращать запрос, как метод "найти". И по запросу вы можете выполнить метод "populate", поэтому я не вижу, что я делаю неправильно.
Я также попытался использовать метод .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, вам нужно предоставить функцию обратного вызова, когда вы используете отдельный метод для запроса, и поэтому в моих журналах я получаю ошибки на всем протяжении. Обходным путем было бы иметь ложную функцию обратного вызова, но я хочу избежать этого...
Есть ли у кого-нибудь идея, почему первая попытка не работает? И если второй подход является приемлемым, если вы предоставите фиктивный обратный вызов?