Как обрезать и сопоставить в агрегации MongoDB?

#mongodb

Вопрос:

Я хочу выполнить агрегацию MongoDB, которая сначала совпадает с некоторыми значениями, а затем группирует их. Но поле, которое должно быть сопоставлено, имеет значения в базе данных, в некоторых из которых есть начальные и конечные пробелы. Я хочу сначала обрезать, а затем сопоставить их. Как мне это сделать?

 async AggregateTypes(_, { retailer_type }) {
  const matchCond = {};
  if(retailer_type) matchCond.cidm_retailer_type = {$in: retailer_type}
  res = await collection.aggregate([
    { 
        $match: matchCond 
    },
  ]);
}
 

Ответ №1:

Вы можете попробовать оператор $trim в $expr условии соответствия выражений,

 if(retailer_type) {
  matchCond = { 
    $expr: { 
      $in: [
        { $trim: { input: "$cidm_retailer_type" } }, 
        retailer_type
      ] 
    }
  }
}
 

Комментарии:

1. Могу ли я сопоставить их с другими совпадениями, которые также используют оператор $in?

2. да, вы можете, но для такого типа случаев для прямого соответствия вы можете поставить условие за пределами $expr.. если я ошибаюсь, пожалуйста, покажите какой-нибудь пример, который даст более точное решение..