41 votes

Avertissement de dépréciation de MongoDB mongoose

Lors de l'interrogation des documents en utilisant collection.find J'ai commencé à recevoir l'avertissement suivant dans ma console

DeprecationWarning : l'option [fields] de collection.find est obsolète et sera supprimée sera supprimée dans une version ultérieure

Pourquoi est-ce que je vois cela et comment puis-je le réparer ? (Alternatives possibles)

EDIT : Requête ajoutée

Session
        .find({ sessionCode: '18JANMON', completed: false })
        .limit(10)
        .sort({time: 1})
        .select({time: 1, sessionCode: 1});

Mongoose version 5.2.9

0 votes

Avez-vous essayé d'utiliser collection.find(query).limit(1).project({name:1}) ?

0 votes

Bonjour @DanieleTassone à chaque fois que j'utilise find() cet avertissement apparaît

0 votes

Pourriez-vous afficher votre requête complète

70voto

Veeram Points 36230

Mise à jour :

La version 5.2.10 est disponible et peut être téléchargée. aquí .

Pour plus d'informations sur les docs, vous pouvez consulter la page https://mongoosejs.com/docs/deprecations

Pour plus d'informations sur ce problème et sa résolution https://github.com/Automattic/mongoose/issues/6880

Réponse originale :

La version 5.2.9 de Mongoose a mis à niveau le pilote natif mongodb vers la version 3.1.3 dans laquelle des modifications ont été ajoutées afin d'envoyer des messages d'avertissement lorsque la méthode dépréciée du pilote natif est appelée.

fields est dépréciée et est remplacée par projection option.

Vous devrez attendre que Mongoose apporte des modifications de son côté pour remplacer l'option de champs par la projection. La correction est prévue pour la version 5.2.10.

Pour l'instant, vous pouvez revenir à la version 5.2.8 qui supprimera tous les avertissements de dépréciation.

npm install mongoose@5.2.8

Pour tous les autres avertissements dépréciés, vous devez les aborder au cas par cas.

Vous verrez d'autres avertissements de dépréciation lorsque vous utiliserez d'autres méthodes de collecte.

DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
DeprecationWarning: collection.save is deprecated. Use insertOne, insertMany, updateOne, or updateMany instead.
DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.

Tous findOne* Par défaut, les méthodes d'écriture de Mongoose utilisent le findAndModify qui est obsolète dans le pilote natif de mongodb.

Utilisez mongoose.set('useFindAndModify', false); pour que mongooose appelle le service approprié findOne* sur le pilote natif de mongodb.

Pour remove y update remplacer ces appels par delete* y update* respectivement.

Pour save remplacer ces appels par insert* / update* respectivement.

Utilisez mongoose.set('useCreateIndex', true); pour que mongooose appelle le createIndex sur le pilote natif de mongodb.

18voto

Will Abule Points 1205
mongoose.connect('your db url', {
  useCreateIndex: true,
  useNewUrlParser: true
})

o

mongoose.set('useCreateIndex', true)
mongoose.connect('your db url', { useNewUrlParser: true })

2 votes

Bien que cela puisse répondre à la question des auteurs, il manque des mots explicatifs et/ou des liens vers la documentation. Les extraits de code bruts ne sont pas très utiles s'ils ne sont pas accompagnés de quelques phrases. Vous pouvez également trouver comment rédiger une bonne réponse très utile. Veuillez modifier votre réponse.

0 votes

Non, c'est une bonne réponse. L'avertissement a disparu.

5voto

Ishwar Chandra Points 405

Après la mise à niveau vers la version 5.2.10. Vous pouvez utiliser l'une des options suivantes

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/test', {

  useCreateIndex: true,
  useNewUrlParser: true

})
.then(() => console.log('connecting to database successful'))
.catch(err => console.error('could not connect to mongo DB', err));

o

const mongoose = require('mongoose');

mongoose.set('useCreateIndex', true);

mongoose.connect('mongodb://localhost/test',{

    useNewUrlParser: true

})
.then(() =>  console.log('connecting to database successful') )
.catch(err =>  console.error('could not connect to mongo DB', err) );

3voto

Naved Ahmad Points 31

Vous pouvez faire un npm install mongoose@5.2.8 et cela vous aidera à revenir à une version antérieure qui ne présentera pas d'avertissement de dépréciation.

0 votes

Il suffit de rétrograder la version pour éviter les avertissements ?

1voto

Blackersoul Points 130

Cela a fonctionné pour moi en avril 2020 :

mongoose.connect(process.env.DATABASE_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
})

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