Запрос MongoDB, замена одного указанного поля c на регулярное выражение - PullRequest
3 голосов
/ 11 февраля 2020

Если у меня есть коллекция, определенная как,

const userSchema = new mongoose.Schema({
  username: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },

Как я могу запросить все документы, но заменить каждый пароль на звездочки?

Что-то вроде,

const users = await User.find({
  password: password.replace(/./gi, '*');
})

Возможно ли это?

1 Ответ

3 голосов
/ 11 февраля 2020

Вы не можете сделать это с помощью запроса find(), поскольку он используется только для извлечения данных, вместо этого можно использовать aggregate для этого с $addFields этап.

const users = await User.aggregate([
  { "$addFields": {
    "password": {
      "$reduce": {
        "input": { "$range": [0, { "$strLenCP": "$password" }] },
        "initialValue": "",
        "in": {
          "$concat": [
            "*",
            "$$value"
          ]
        }
      }
    }
  }}
])

console.log({ users })

MongoPlayground

...