3 votes

Interroger MongoDB en remplaçant un champ spécifique par une expression rationnelle.

Si j'ai une collection définie comme,

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

Comment puis-je demander tous les documents, mais remplacer tous les mots de passe par des astérisques ?

Quelque chose comme,

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

Est-ce possible ?

3voto

Anthony Winzlet Points 10216

Vous ne pouvez pas le faire avec find() car elle ne sert qu'à récupérer des données. aggregate pour cela avec un $addFields scène.

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

console.log({ users })

MongoPlayground

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X