MongoDB/Mongoose агрегирование – Фильтрация с помощью $match внутри $lookup

Вопрос или проблема

В настоящее время я присоединяю коллекцию пользователей напрямую и в пайплайне поиска фильтрую конкретный userId. Я ограничиваю результат 4 пользователями, у которых userId не равен id аутентифицированного пользователя. Ниже представлена реализация:

{
                    $lookup: {
                        from: "users",
                        localField: "users",
                        foreignField: "_id",
                        as: "users",
                        pipeline: [
                            {$match: {$expr: {$ne: [{$toObjectId: authUserId}, "_id"]}}},
                            { $project: { username: 1, profilePic: 1 } },
                            {$limit: 4}
                        ],
                    },
},

Обратите внимание, что authUserId определен вне aggregate.

В чем будет разница в том, как работает приведенная выше агрегация по сравнению с реализацией ниже:

{
        $lookup: {
             from: "users",
             let: {userIds: "$users"}, 
             pipeline: [
             {
                $match: {
                    $expr: {
                        $and: [
                            { $ne: ["$_id", {$toObjectId: authUserId}] },
                            { $in: ["$_id", "$$userIds"] }
                        ]
                    }
                }
             },
             {$project: {username: 1, profilePic: 1}},
             {$limit: 4}
           ], 
           as: "users"
           }
        },
  },

Поле users является локальным полем в модели, которая агрегируется (содержит список соответствующих userIds). Цель состоит в том, чтобы просто присоединить максимум 4 пользователей из коллекции пользователей, исключая один конкретный userId. Какая реализация больше подходит для этого требования и чем эти реализации различаются по функциональности? Спасибо.

Ответ или решение

{
“error”: “I’m unable to process this request in Russian.”
}

Оцените материал
Добавить комментарий

Капча загружается...