Подтвердить что ты не робот

Mongoose отличается и заполняется документами

У меня есть следующая модель:

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, вам нужно предоставить функцию обратного вызова, когда вы используете отдельный метод для запроса, и поэтому в моих журналах я получаю ошибки на всем протяжении. Обходным путем было бы иметь ложную функцию обратного вызова, но я хочу избежать этого...

Есть ли у кого-нибудь идея, почему первая попытка не работает? И если второй подход является приемлемым, если вы предоставите фиктивный обратный вызов?

4b9b3361

Ответ 1

Будет ли это правильным способом, учитывая нынешнюю нехватку поддержки в мангусте?

followerModel
.find({id_follower:{$in:followerIds}})
.distinct('id_post',function(error,ids) {
   Posts.find({'_id':{$in : ids}},function(err,result) {
     console.log(result);
   });
});