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

マングースを使用してmongodbの一括操作から変更されたIDSを取得する方法はありますか?

    ある観点からすると、答えは「いいえ」であり、それには非常に正当な理由があります。

    一般的に、MongoDBの「更新」操作は、一般的に「複数の」ドキュメントであるもの全体で機能することを目的としているため、基準に一致するものは何でも意味します。したがって、ここでの一般的なケースは、単数形で更新するか、選択によって更新するように要求したものが、一致したものがあるかどうかに応じて更新されたかどうかです。

    「バルク」コンテキストでは、基準が一致するかどうかにかかわらず、ほとんど同じことが当てはまります。この場合、nMatchedの戻り値が返されます。 およびnModified 繰り返しになりますが、「一致した」ドキュメントが実際に更新されない可能性もあるため、変更対象のデータがすでに変更の対象となる値になっています。

    nMatchedの最後の違い およびnModified 「これを確実に行うことができない」の主な理由です。 、一致するすべてが必ずしも変更されるわけではないため。

    ただし、推測を行うことはできます 「アップサート」アクションと実際の「更新」を区別する場合の値。明確な違いがあるため、100%正確ではありませんが、基本的なプロセスは、入力リストをgetUpsertedIds()からの戻り値と比較することです。 、これは有効な呼び出しです。

    現在、世界の他の地域でES6構文を使用しない:

    var upserted = result.getUpsertedIds();    // get this from the bulk result
    
    upserted = upserted.map(function(up) { return up._id }); // filter out just the _id values
    
    var modifiedIds = edges.map(function(edge) {    // get _id only from source 
        return edge.id;  
    }).filter(function(edge) {
        return upserted.indexOf(edge) == -1;        // and return only non upserted
    });
    

    .getUpsertedIds()から返された結果 は、一括更新からの「インデックス」位置と、生成または提供された_idの両方を含むオブジェクトの配列です。 「アップサート」の値。

    [ { index: 0, _id: 1 } ]
    

    したがって、入力リストを「upserted」リストと照合して、「そこにないもの」を確認します。 、基本的におそらく 変更したばかりです。もちろん、値がすでに変更と同じである場合、それは実際にはまったく変更ではないという警告があります。

    しかし、APIがどのように機能するかにより、これはあなたが得ようとしているものと同じくらい近いものです。




    1. MongoDB:BSONからJSON

    2. Mongoは、親キーが不明な値を検索します

    3. 式ツリーはUpdateOneAsyncではサポートされていません

    4. SpringデータmongoとSpringデータelasticearchを使用する場合のモデリング方法は?