Вопрос или проблема
В настоящее время я присоединяю коллекцию пользователей напрямую и в пайплайне поиска фильтрую конкретный 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.”
}