web-dev-qa-db-fra.com

MongoDB mongoose collection.find options Deprecation Warning

Lors de l'interrogation des documents à l'aide de collection.find, j'ai commencé à recevoir l'avertissement suivant dans ma console.

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

Pourquoi est-ce que je vois cela et comment puis-je résoudre ce problème? (Alternatives possibles)

EDIT: Query Added

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

Mongoose version 5.2.9

28
Monkey D Luffy

Mise à jour:

5.2.10 est disponible et disponible au téléchargement ici .

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

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

Pour plus d'informations sur le problème et sa solution https://github.com/Automattic/mongoose/issues/688

Réponse originale:

La version Mongoose 5.2.9 a mis à niveau le pilote natif mongodb vers la version 3.1.3 dans laquelle des modifications ont été ajoutées pour émettre des messages d'avertissement lorsque la méthode du pilote natif obsolète est appelée.

fields L'option est obsolète et est remplacée par l'option projection.

Vous devrez attendre que mangouste apporte des modifications à leur fin pour remplacer l'option de champs par projection. Le correctif est prévu pour la version 5.2.10.

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

npm install [email protected]

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

Vous verrez d'autres avertissements de dépréciation lorsque vous utilisez 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.

Toutes les méthodes d'écriture findOne* mongoose utilisent par défaut la méthode findAndModify qui est déconseillée dans le pilote natif de mongodb.

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

Pour remove et update, remplacez ces appels par les méthodes delete* et update*.

Pour save, remplacez ces appels par les méthodes insert*/update*.

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

ou

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

Après la mise à niveau vers la version 5.2.10. N'importe laquelle des options ci-dessous peut être utilisée

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));


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) );
3
Ishwar Chandra

Vous pouvez faire un npm install [email protected] et cela vous aidera à revenir à une version antérieure qui ne montrera aucun avertissement de dépréciation

2
Naved Ahmad