sql >> データベース >  >> NoSQL >> MongoDB

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

    クエリuseFindAndModifyでオプションを設定する必要があります falseに 、ドキュメントに記載されているように。

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

    'useFindAndModify':デフォルトでtrue。 falseに設定すると、makefindOneAndUpdate()およびfindOneAndRemove()は、findAndModify()ではなくnativefindOneAndUpdate()を使用します。

    また、mongooseの定義ファイルが表示されている場合は、findAndModifyupdateコマンドを呼び出していると記載されています。

     /**
      * 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の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});
    
    


    1. アクティブジョブ/バックグラウンドジョブにファイルを渡す

    2. JSON文字列の逆シリアル化中の名前空間の変更の処理

    3. 高可用性のためにMongoDBをデプロイする方法

    4. マスターデータベースとしてMongoDBを使用する場合、エンティティ間の関係を実装するために別のグラフデータベースを使用する必要がありますか?