Je dois demander - j'ai un point de terminaison /users et je veux ajouter des tâches à l'utilisateur, comme ça : /users/:username/tasks. Dois-je créer un autre modèle et un autre itinéraire ? Je ne sais pas comment ajouter un ID à un tableau dans le modèle Mongoose et ajouter un slug avec mongoose-url-slugs.

Je veux que ce soit RESTful autant que je peux. Alors ceci : /users/:username/tasks ou /tasks/:username ? Si d'abord, j'ai besoin de savoir comment ajouter un identifiant à tasks dans ce modèle :

import mongoose from 'mongoose'

const User = mongoose.Schema({
    username: String,
    email: String,
    password: String,
    tasks: Array
}, {
    timestamps: true
})

export default mongoose.model('User', User)
-1
Cholewka 19 févr. 2020 à 22:14

1 réponse

Meilleure réponse

À mon avis, je pense que vous devriez créer un nouveau modèle de tâches.

Vous pouvez utiliser une référence au modèle de tâches comme ceci :

tasks: [{ type: Schema.Types.ObjectId, ref: 'tasks' }]

https://mongoosejs.com/docs/populate.html

Cette route est meilleure car vous ajoutez une tâche à l'utilisateur et non un utilisateur à la tâche /users/:username/tasks

Et pour créer un lien, vous pouvez utiliser le virtuel de mongoose : https://mongoosejs.com/docs/tutorials/ virtuals.html

Exemple : https://github.com/Automattic/mongoose/issues/6608

UserSchema.virtual('tasks', {
  lookup: (doc) => {
    return {
      from: 'tasks',
      let: { userId: '$_id' },
      pipeline: [{
        $match: {
          $expr: {
            $and: [{
              $eq: ['$refId', '$$userId']
            }]
          }
        }
      }, {
        $project: { name: 1, createdAt: 1 }
      }
      ],
      as: 'tasks',
    }
  }
});
userModel.find().populate('tasks').lean(true);
0
Aldo Benardes 19 févr. 2020 à 19:55