#node.js #arrays #mongodb #mongoose #mongodb-query
Вопрос:
Я рассматриваю фильтрацию только в том случае, если пользователь желает выполнить фильтрацию на основе определенного критерия.
Я могу фильтровать просто отлично, используя $in, но когда критерии, используемые в фильтре $in, не предусмотрены, он жалуется, что ему нужен массив. Замена его на [] приводит к тому, что он возвращается пустым, и у меня нет списка всех возможных значений для вставки (и я не уверен, что хотел бы этого).
Есть какие-нибудь идеи? Цвета ниже являются необязательными критериями. *Было бы неплохо, если бы был флаг пропуска, который я мог бы использовать.
const profiles = await Profile.aggregate([
{
$geoNear: {
...geoFilter,
},
},
{
$match: {
$and: [
{
_id: {
$ne: Profile.castID(req.user.profileID),
},
colors: { $in: colors },
},
],
},
},
{ $skip: skip },
{ $limit: limit },
]);
Ответ №1:
Используйте этот:
var match = { _id: {$ne: Profile.castID(req.user.profileID)} };
if (typeof colors != "undefined") {
match.colors = { $in: colors };
}
Profile.aggregate([
{
$geoNear: {
...geoFilter,
},
},
{ $match: match },
{ $skip: skip },
{ $limit: limit },
]);
Вам это не нужно $and
, однако в случае, если у вас возникнет ситуация, когда это необходимо, используйте
var match = [{ _id: {$ne: Profile.castID(req.user.profileID)} }];
if (typeof colors != "undefined") {
match.push({colors: { $in: colors }});
}
Profile.aggregate([
{
$geoNear: {
...geoFilter,
},
},
{ $match: {$and: match}},
{ $skip: skip },
{ $limit: limit },
]);