Как я могу переписать мой запрос Мангуста после разделения данных из одной модели на две?

В моем приложении я храню комментарии. Ранее моя модель для этого выглядела так:

var CommentsSchema = new Schema({
    username: {type: String},
    display_name: {type: String},
    facebook_username: {type: String},
    text_content: {type: String},
    photo_content_url: {type: String},
    hashtags: {type: [String]},
    device_id: {type: String},
    comment_date: {type: Date, default: Date.now},
    friends_only: {type: Boolean, default: false}
}

Каждый комментарий - помимо хранения его деталей - также содержал сведения об авторе, например,username, facebook_username, device_id из которого был добавлен комментарий иdisplay_name, Был также флаг Boolfriends_only на основании которого я решал, должен ли этот комментарий быть видимым только для друзей пользователя на Facebook или для всех.

Строительствоnode.js/mongoose Запрос на получение всех комментариев выглядел так:

commentsRoutes.post('/friends', function (req, res) {
    var friends = req.body.friends;
    var publicComments = req.body.publicComments;

    var hashtagsInput = req.body.hashtags;

    var startDate = req.body.startDate;
    var endDate = req.body.endDate;

    var query= {};
    query.$and = [];

    // and condition on start date
    if(startDate != undefined) {
        var startDate = new Date(req.param('startDate'));
        var endDate = new Date(req.param('endDate'));
        query.$and.push({"comment_date":{$gte: startDate}});
        query.$and.push({"comment_date":{$lte: endDate}});
    }

    // and condition on hastags
    if (hashtagsInput != undefined) {
        var hashtags = hashtagsInput.split(",");
        query.$and.push({"hashtags":{$in: hashtags}});
    }

    // creating a OR condition for facebook friends and public flag
    var friend_query = {};
    friend_query.$or = [];

    if (friends != undefined) {
        var friendsSplit = friends.split(",");
        friend_query.$or.push({"facebook_username":{$in: friendsSplit}});
    }

    if (publicComments != undefined && publicComments === "true") {
        friend_query.$or.push({friends_only: false});
    }

    //Merging facebook friend condition with other condition with AND operator.
    query.$and.push(friend_query);

    var finalQuery = Comment.find(query)

С помощью приведенного выше кода пользователь может получать контент, опубликованный его друзьями (который был установлен как общедоступный или частный), и весь другой общедоступный контент (от всех остальных).

Я решил изменить все это и разделить данные на две модели. После его изменения у меня есть:

var CommentsSchema = new Schema({
    user_id: {type: String, required: true, ref: 'users' },
    text_content: {type: String},
    photo_content_url: {type: String},
    hashtags: {type: [String]},
    comment_date: {type: Date, default: Date.now},
    friends_only: {type: Boolean, default: false},
    device_id: {type: String}
}

а также

var UsersSchema = new Schema({
    username: {type: String},
    facebook_username: {type: String},
    display_name: {type: String}
}

Теперь, когда я хочу сохранить прежнюю функциональность, мне нужно изменить код, отвечающий за создание запроса. Я мог бы объединить два запроса сasyncили другой способ заключается в использованииmongoose .populate вариант. Я решил пойти со вторым выбором, поэтому теперь мне нужно переместить код, отвечающий за созданиеor запрос кmatch частьpopulate функция:

...
var finalQuery = Comment.find(query)

finalQuery.populate({path: 'user_id', 
    select: 'facebook_username display_name username',
    match: {

}});

Я не знаю, как это сделать. Вы можете помочь мне с этим?

Ответы на вопрос(1)

Ваш ответ на вопрос