Substr в условном агрегате mongodb - PullRequest
1 голос
/ 17 февраля 2020

Мне нужно посчитать сотрудников с действительным суффиксом почтового идентификатора с @ test.com. Я попробовал следующие запросы:

db.emp.aggregate([
        { $match: {} },
        { $addFields:{
          "validEmail":{$cond:[{$eq:[{"$substr":["$emp_email",9,-1]},"@test.com"]},1,0]} 
           }
        }
    ])

Здесь оператор $ substr не возвращает вывод в обратном порядке. Мое предположение состоит в том, что -1 на 3-м аргументе должен подставляться с обратным путем. Это не работает.

Я использую версию mongodb меньше 4.2 и не могу использовать $ regexMatch. Есть ли способ добиться этого.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете $split с помощью @ и проверить, содержит ли последний индекс test.com.

  .aggregate([
    {
      "$project": {
        "validEmail": {
          "$eq": [
            { "$arrayElemAt": [{ "$split": ["$emp_email", "@"] }, -1] },
            "test.com"
          ]
        }
      }
    }
  ])

MongoPlayground

0 голосов
/ 19 февраля 2020

Вы можете просто использовать регулярное выражение:

db.collection.find({
  email: {
    $regex: ".+@test.com\\b",
  }
})
...