MongoDB Агрегация регулярных выражений совпадает идентификатор объекта - PullRequest
0 голосов
/ 22 января 2020

У меня есть коллекция;

  "users": [
{
  "_id": ObjectId("5c4185be19da7e815cb18f59"),
  "name": "User1"
},
{
  "_id": ObjectId("5c4185be19da7e815cb18f5a"),
  "name": "User2"
}  ]

Мне нужно искать коллекцию пользователей по регулярному выражению.

db.results.aggregate([{
        "$match": {
            "name": {
                "$regex": "user",
                "$options": "si"
            }
        }
    }
])

это работает для поиска по полю пользователя. Я попытался с помощью приведенного ниже кода для поиска по id. Но у меня это не сработало.

db.results.aggregate([{
        "$match": {
            "_id": {
                "$regex": "18f5a",
                "$options": "si"
            }
        }
    }
])

Заранее спасибо.

1 Ответ

1 голос
/ 22 января 2020

Поле _id по умолчанию имеет тип ObjectId, поэтому вы не можете сопоставить его с регулярным выражением.

Если вы используете Mon go версии 4.0+, вы можете использовать toString .

db.results.aggregate([
      {
         $addFields: {
            _id: {$toString: "$_id"}
         }
     },
     {
        "$match": {
            "_id": {
                "$regex": "18f5a",
                "$options": "si"
            }
        }
    }
])
...