Mongoose findOneAndUpdate
を使用していますが、それでもエラーが発生します。
DeprecationWarning:collection.findAndModifyは非推奨です。代わりにfindOneAndUpdate、findOneAndReplace、またはfindOneAndDeleteを使用してください。
しかし、私はfindAndModify
を使用していません。なぜクエリをfindAndModify
に変換するのですか?
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つ以上あります。
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
mongoose.connect(uri, { useFindAndModify: false });
await ModelName.findOneAndUpdate({matchQuery},
{$set: updateData}, {useFindAndModify: false});
次のように、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);
それでおしまい。
接続でオプションオプションuseNewUrlParser
を使用してオプションを渡すこともできます。次を見てください-> https://mongoosejs.com/docs/deprecations.html
mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useFindAndModify: false});
あなたはそれを取り除くためにあなたの接続方法オプションを変更する必要があります:
mongoose.connect("mongodb://localhost/DB_Name", {
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false
});
このように使用できます。