web-dev-qa-db-ja.com

DeprecationWarning:collection.findAndModifyは非推奨です。代わりにfindOneAndUpdate、findOneAndReplace、またはfindOneAndDeleteを使用しますか?

Mongoose findOneAndUpdateを使用していますが、それでもエラーが発生します。

DeprecationWarning:collection.findAndModifyは非推奨です。代わりにfindOneAndUpdate、findOneAndReplace、またはfindOneAndDeleteを使用してください。

しかし、私はfindAndModifyを使用していません。なぜクエリをfindAndModifyに変換するのですか?

28
Sudhanshu Gaur

docs で説明されているように、クエリのオプションをuseFindAndModifyからfalseに設定する必要があります。

(検索キーワード現在サポートされているオプションは

'useFindAndModify':デフォルトではtrue。 falseに設定して、findOneAndUpdate()およびfindOneAndRemove()がfindAndModify()ではなくネイティブfindOneAndUpdate()を使用するようにします。

また、mongooseの定義ファイルが表示されている場合は、findAndModify更新コマンドを呼び出すと述べられています。

 /**
  * Issues a mongodb findAndModify update command.
  * Finds a matching document, updates it according to the update arg, 
    passing any options,
  * and returns the found document (if any) to the callback. The query 
    executes immediately
  * if callback is passed else a Query object is returned.
  */
 findOneAndUpdate(): DocumentQuery<T | null, T>;

言及されているこれらの非推奨のために、mongooseドキュメントで最近更新されました( ここをクリック ):

MongooseのfindOneAndUpdate()は、MongoDBドライバーのfindOneAndUpdate()関数よりもずっと前のものであるため、代わりにMongoDBドライバーのfindAndModify()関数を使用します。

FindAndModifyの使用を回避する方法は3つ以上あります。

  1. グローバルレベル:オプションをfalseに設定します。
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
  1. 接続レベルで:接続オプションを使用して設定できます:
    mongoose.connect(uri, { useFindAndModify: false });
  1. クエリレベルで:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});

37
Shivam Pandey

次のように、mongoose構成をグローバルに変更します。

mongoose.set('useFindAndModify', false);

または、次のようにクエリ文字列でオプションを渡します。

Person.findOneAndUpdate({_id: id}, {$set: body}, {new: true, useFindAndModify: false}).then(..

docs として言及して、他のマングースの非推奨警告を管理することもできます。

mongoose.set('useNewUrlParser', true);
mongoose.set('useCreateIndex', true);

それでおしまい。

12

接続でオプションオプションuseNewUrlParserを使用してオプションを渡すこともできます。次を見てください-> https://mongoosejs.com/docs/deprecations.html

mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useFindAndModify: false}); 
5
Polliny

あなたはそれを取り除くためにあなたの接続方法オプションを変更する必要があります:

mongoose.connect("mongodb://localhost/DB_Name", {
  keepAlive: true,
  useNewUrlParser: true,
  useCreateIndex: true,
  useFindAndModify: false
});

このように使用できます。

0
Devesh