0
votes

Comment pouvez-nous trier les données en fonction de la date à MongoDB

Comment puis-je trier le document en ordre croissant ou décroissant dans MongoDB

const mongoose = require('mongoose');
const atHomeSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  partnerName: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  phone: {
    type: String,
    required: true
  },
  weddingDate: {
    type: Date,
    required: false
  },
  city: {
    type: String,
    required: true
  },
  guest: {
    type: Number,
    required: true
  },
  desc: {
    type: String,
    required: true
  },
  createdAt:{
    type: Date,
    default: Date.now()
  }
});

module.exports = mongoose.model('AtHome', atHomeSchema);


7 commentaires

S'il vous plaît, envoyez votre ATHOME schéma.


Ajouter créateda: 1 à $ projet objet.


@MAHDIHASHEMI const athomeschema = nouveau mongoose.schema ({nom: {Type: chaîne, obligatoire: true}, Nom Partnern: {Type: String, Obligatoire: true}, Email: {Type: String, Obligatoire: TRUE}, Téléphone: {Type: String, Obligatoire: TRUE}, MariageDate: {Type: Date, Obligatoire: False}, Ville: {Type: String, Obligatoire: TRUE}, Guest: {Type: Number, Obligatoire: True}, Desc: {Type: String, Obligatoire: True}, Careda: {Type: Date, Par défaut: date.now ()}});


N'envoyez pas cela dans la section Commentaires, mettez à jour votre question.


@MAHDIHASHEMI Ajouter CAREDAT: 1 à $ objet de projet. n'a pas fonctionné


@MAHDIHASHEMI J'ai mis à jour ma quête, s'il vous plaît vérifier maintenant


Trier votre résultat avant le projet, cela peut fonctionner.


4 Réponses :


0
votes

Vous devez inclure le champ CaredateAt dans la projection ou modifier l'ordre des étapes de la pipeline $ Trier alors $ projet .

chacun La scène transforme les documents lorsqu'ils passent à travers le pipeline. Dans votre première étape, vous avez filtré crééa de sorte que la deuxième étape ne prend aucun effet. Il est recommandé d'utiliser $ trier avant $ Project Stage afin $ trier étape peut utiliser l'index. Cela fournira une meilleure performance < / a>. xxx


0 commentaires

1
votes

selon le cadre d'agrégation , vous devez d'abord trier le données, puis projetez-le à la sortie souhaitée. Essayez la requête suivante:

const contact = await AtHome.aggregate([
{ $sort : { createdAt : -1 } },
{ $project: {
        name:1,
        partnerName:1,
        phone:1,
        email:1,
        city:1,
        guest:1,
        desc:1,
        requestedOn: { $dateToString: { format: "%d-%m-%Y", date: "$createdAt" } },
        weddingDate: { $dateToString: { format: "%d-%m-%Y", date: "$weddingDate" } },
      }
    }
  ]);

  try {
    res.send(contact);
  } catch (err) {
    res.send('INVALID');
  }


0 commentaires

0
votes

Comme mentionné dans les réponses ci-dessus, vous devez trier les données avant projet. Je peux voir l'en vous schéma que vous utilisez défaut: date.now () pour le créateat , cela définira la valeur de < Code> CrééAt à TIME Lorsque SCHEMA est défini, tous les enregistrements auront la même valeur pour créateda jusqu'à ce que le redémarrage du serveur est suivant. Vous pouvez utiliser date.now à la place, si vous devez définir le créateda à l'heure lorsque l'enregistrement est créé xxx


0 commentaires

0
votes

Je pense que votre première étape devrait être de comprendre comment fonctionne le pipeline d'agrégation. Dans les phases de pipeline, les données vont d'une étape à une autre. Chaque étage nous faisons quelques modifications de données et que les données modifiées sont transmises à la prochaine étape du pipeline.

Votre première étape est un projet qui renvoie les champs que vous avez spécifiés: Entrez la description de l'image ici p>

et cette donnée est ensuite transmise à la phase de tri et, comme l'étape de tri ne peut pas trouver de champ CareatAt dans des données de première étape, des données non traitées sont renvoyées. . P>

Ajoutez p>

const schema = Schema({
  //your fields
}, {
  timestamps: true }
});


0 commentaires