collection.find
を使用してドキュメントをクエリしているときに、コンソールで次の警告が表示されるようになりました
DeprecationWarning:collection.findオプション[fields]は非推奨であり、今後のバージョンで削除されます
なぜこれが表示され、どのように修正するのですか? (可能な代替案)
編集:クエリの追加
Session
.find({ sessionCode: '18JANMON', completed: false })
.limit(10)
.sort({time: 1})
.select({time: 1, sessionCode: 1});
Mongooseバージョン5.2.9
更新:
5.2.10がリリースされ、ダウンロード可能になりました here 。
mongoose.set('useCreateIndex', true);
を使用して、mongoboseがmongodbネイティブドライバーでcreateIndex
メソッドを呼び出すようにします。
ドキュメントの詳細については、ページを表示できます https://mongoosejs.com/docs/deprecations
問題とその修正の詳細については https://github.com/Automattic/mongoose/issues/688
元の答え:
Mongoose 5.2.9バージョンでは、ネイティブmongodbドライバーが3.1.3にアップグレードされ、非推奨のネイティブドライバーメソッドが呼び出されたときに警告メッセージをスローするように変更が追加されました。
fields
オプションは廃止され、projection
オプションに置き換えられました。
Fieldsオプションをプロジェクションに置き換えるには、mongooseが最後に変更を加えるのを待つ必要があります。この修正は5.2.10リリースで予定されています。
当分の間、すべての非推奨警告を抑制する5.2.8に戻ることができます。
npm install [email protected]
廃止された他のすべての警告については、ケースバイケースで対処する必要があります。
他の収集方法を使用すると、他の非推奨の警告が表示されます。
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.
すべてのfindOne*
mongoose書き込みメソッドは、デフォルトで findAndModify
メソッドを使用しますが、これはmongodbネイティブドライバーでは非推奨です。
mongoose.set('useFindAndModify', false);
を使用して、mongoooseがmongodbネイティブドライバーで適切なfindOne*
メソッドを呼び出すようにします。
remove
およびupdate
の場合、それらの呼び出しをそれぞれdelete*
およびupdate*
メソッドに置き換えます。
save
の場合、それらの呼び出しをそれぞれinsert*
/update*
メソッドに置き換えます。
mongoose.connect('your db url', {
useCreateIndex: true,
useNewUrlParser: true
})
または
mongoose.set('useCreateIndex', true)
mongoose.connect('your db url', { useNewUrlParser: true })
バージョン5.2.10にアップグレードした後。以下のオプションのいずれかを使用できます
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) );
npm install [email protected]
を実行できます。これにより、非推奨の警告が表示されない以前のバージョンに戻ることができます。