Как сделать регулярное выражение с номером в Mongodb - PullRequest
0 голосов
/ 04 марта 2020

У меня есть данные, как показано ниже.

[
  { num: 123, name: 'good'},
  { num: 12345, name: 'hey'},
  { num: 4523, name: 'yo' },
  { num: 777, name: 'hihi' }
]

И я хочу выполнить поиск с помощью регулярных выражений, чтобы получить какой-то результат.
Например, когда я ставлю 45, этот поиск только 12345, 4523 .

a.find({num: {$regex: req.query.q}, name: 'yo'})

Но когда я передаю запрос наподобие '45', он говорит: «Не могу использовать $ regex with Number.».
Как мне выполнить поиск, используя regex with number? Большое спасибо за чтение.

1 Ответ

2 голосов
/ 04 марта 2020

Regex может совпадать только тогда, когда сопоставляемое поле имеет значение перемешивания, но num в вашем случае - это число.

В документах Mongodb так сказано: https://docs.mongodb.com/manual/reference/operator/query/regex/#op ._ S_regex

Однако есть обходной путь, использующий «$ where», в котором вы можете выполнить Javascript для возврата логического значения.

db.collection.find({
  $where: "/45/.test(this.num) && this.name==='yo'"
})

Я пробовал это на mongoplayground. Попробуйте: https://mongoplayground.net/p/8E9kGt5moAO

Чтобы узнать больше о том, как $ где работает, вы можете увидеть документы Mongodb здесь: https://docs.mongodb.com/manual/reference/operator/query/where/#where

Есть также способ сделать это без $ where (в MongoDb 4.2):

db.collection.find({
  $expr: {
    $and: [
      {
        $regexMatch: {
          input: {
            $toString: "$num"
          },
          regex: "45"
        }
      },
      {
        $gte: [
          "$time",
          12350
        ]
      },
      {
        $lt: [
          "$time",
          12400
        ]
      }
    ]
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...