web-dev-qa-db-ja.com

MongoDB mongoose collection.findオプション非推奨の警告

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

28
Monkey D Luffy

更新:

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*メソッドに置き換えます。

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

または

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

バージョン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) );
3
Ishwar Chandra

npm install [email protected]を実行できます。これにより、非推奨の警告が表示されない以前のバージョンに戻ることができます。

2
Naved Ahmad